1

コンテナコントローラーとその子の関係を理解し​​ようとしています。私は、presentingViewControllerとparentViewControllerの間のAppleの区別がやや恣意的であることに気づきました。たとえば、UINavigationControllerを含むUITabBarControllerを使用してストーリーボードを作成しました。navコントローラーは別のUIViewControllerをプッシュし、UIViewControllerはモーダルビューコントローラーを表示します。

ストーリーボードの画像はhttp://www.personal-lexicon.com/xyz/ViewControllerParentTest.pngにあります。

各コントローラーの[親情報の表示]ボタンを押して、次のコードを使用してその関係を印刷しました。

- (IBAction)showParent:(id)sender {
const char *selfCls = class_getName(self.class);
NSLog(@"%@ = %p (%s)", self.title, self, selfCls);

const char *parentCls = class_getName(self.parentViewController.class);
NSLog(@"Parent Controller = %p (%s)", self.parentViewController, parentCls);

const char *presentingCls = class_getName(self.presentingViewController.class);
NSLog(@"Presenting Controller = %p (%s)", self.presentingViewController, presentingCls);

const char *navCls = class_getName(self.navigationController.class);
NSLog(@"Navigation Controller = %p (%s)", self.navigationController, navCls);

const char *tabCls = class_getName(self.tabBarController.class);
NSLog(@"TabBar Controller = %p (%s)\n\n", self.tabBarController, tabCls);
}

これにより、次の出力が得られます。

Root = 0x68ca810 (PTMasterViewController)
Parent Controller = 0x68ca610 (UINavigationController)
Presenting Controller = 0x0 (nil)
Navigation Controller = 0x68ca610 (UINavigationController)
TabBar Controller = 0x68ca3a0 (UITabBarController)

1st Push = 0x68d6f10 (PTMasterViewController)
Parent Controller = 0x68ca610 (UINavigationController)
Presenting Controller = 0x0 (nil)
Navigation Controller = 0x68ca610 (UINavigationController)
TabBar Controller = 0x68ca3a0 (UITabBarController)

Modal 1 = 0x68d7860 (PTMasterViewController)
Parent Controller = 0x0 (nil)
Presenting Controller = 0x68ca3a0 (UITabBarController)
Navigation Controller = 0x0 (nil)
TabBar Controller = 0x0 (nil)

ルート1番目のプッシュコントローラーの関係は理にかなっていますが、モーダルコントローラーがUITabBarControllerをその提示コントローラーとして表示するのはなぜですか?私にとって、これは最初のプッシュコントローラーである必要があります。ナビゲーションコントローラーでさえ、タブバーコントローラーよりも理にかなっています。

4

0 に答える 0