AppDelegate から tabbarcontroller を作成するアプリケーションがあります。ナビゲーションバーにボタンを追加したかったのですが、できませんでした。最終的には、動作するコードを手に入れることができましたが、よくわかりません。
手順は次のとおりです。
- AppDelegate を UINavigationControllerDelegate に確認する
- rootNavigationController.delegate = self を設定します
- navigationController:willShowViewController:animated と tabBarController:didSelectViewController をオーバーライドする
私はtabBarController:didSelectViewControllerコードに従っていると思いますが、 navigationController:willShowViewController:animatedで何が起こっているのかわかりません。
- (void) tabBarController: (UITabBarController*) tabBarController didSelectViewController: (UIViewController*) viewController
{
if (UI_USER_INTERFACE_IDIOM() == UIUserInterfaceIdiomPhone)
{
self.tabBarController.navigationItem.title = viewController.navigationItem.title;
self.tabBarController.navigationItem.rightBarButtonItems = viewController.navigationItem.rightBarButtonItems;
self.tabBarController.navigationItem.leftBarButtonItems = viewController.navigationItem.leftBarButtonItems;
}
}
- (void) navigationController: (UINavigationController*) navigationController
willShowViewController: (UIViewController*) viewController
animated: (BOOL) animated
{
if (viewController == tabBarController)
{
UIViewController* tabViewController = tabBarController.selectedViewController;
SEL willShowSel = @selector(navigationController:willShowViewController:animated:);
if ([tabViewController respondsToSelector: willShowSel])
{
UIViewController<UINavigationControllerDelegate>* vc =
(UIViewController<UINavigationControllerDelegate>*) tabViewController;
[vc navigationController: navigationController willShowViewController: vc animated: animated];
}
}