我有一个从AppDelegate创建tabbarcontroller的应用程序。我想在导航栏中添加一个按钮,但无法使用。最终我设法获得了一些工作代码,但我真的不明白它。
步骤是:
我想我遵循 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];
}
}
答案 0 :(得分:1)
此代码可能会处理UITabBarController
内使用UINavigationController
时出现的问题。 UITabBarController
文档声明它必须是根视图控制器(即不在UINavigationController
内)并以其他方式使用它可能会导致问题。
代码看起来正在做的是捕获通常传递给viewController
的事件,检查它是否为UITabBarController
,如果是,则检查{{1}中的可见视图响应此方法,如果确实如此,则将方法(选择器)调用传递给该视图。
如果有可能,我建议将UITabBarController
从UITabBarController
嵌入。UINavigationController
。可能需要一些工作,但会使您的代码符合要求。 (并删除对navigationController:willShowViewController:animated: