私は、UIViewControllerのカテゴリを作るAlexの提案の購入を試みましたが、それはシミュレータでは動作しましたが、私の電話では動作しませんでした。ここでは、カテゴリ
@interface UIViewController (parentSetter)
-(void)setParentUIViewController:(UIViewController*)parent;
@end
@implementation UIViewController (parentSetter)
-(void)setParentUIViewController:(UIViewController*)parent
{
_parentViewController = parent;
}
@end
があることは、コンパイルし、正常に動作しますが、少し置くオフであるアンダースコアメンバーに注意してください。 これは、3.0 SDKに対してコンパイルするときにリンカエラーが発生する原因です。
2つのサブビューを持つコンテナビューがあり、そのうちの1つがテーブルです。テーブルには親が必要なので、ナビゲーションバーなどとやりとりすることができます。
私の代わりに、このソリューションで行くよ:
@interface AdoptedTableViewController : UITableViewController {
UIViewController* surrogateParent;
}
-(UINavigationController*)navigationController;
@property (nonatomic, assign) IBOutlet UIViewController *surrogateParent;
@end
@implementation AdoptedTableViewController
@synthesize surrogateParent;
-(UINavigationController*)navigationController
{
if([super navigationController])//self.navigationController)
{
return [super navigationController];
}
else
{
return surrogateParent.navigationController;
}
}
- (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath {
[tableView deselectRowAtIndexPath:indexPath animated:YES];
}
私のテーブルビューコントローラのすべてが今adoptedTableViewControllersです。親が必要な主な理由は、ビューコントローラをナビゲーションスタックに押し込むことができるため、ナビゲーションコントローラゲッターによって透過的に処理されるためです。
parentViewControllerが読み込み専用ではなく、_parentViewControllerを使用すると、そのプロパティだけでなくViewController階層に多くの情報があることがわかりました。私は、Appleが大衆のために十分にクリーンアップしていないという関係の中で、たくさんのつながりと責任があると思う。たとえば、私が修正できなかったナビゲーション階層を上に移動すると、奇妙な選択解除動作に気がつきました。おそらくUINavigationコントローラーは、トップコントローラーのクラスを反映し、異なる動作をしますか?
要するに、これは実際には読み取り専用であり、クリーンまたは簡単な回避策はありません。あなたはちょうどその周りに設計する必要があります。
私はこのスレッドのすべての回答を投票した人が理由を挙げることができると思います:) – willcodejavaforfood
私はそうではありませんでしたが、私はプライベートAPIを使用することに同意していないと思うし、プライベートAPI SO上で共通しています。たぶん彼らはAppleの凶悪犯だ。 –