0

我有一个从 AppDelegate 创建 tabbarcontroller 的应用程序。我想在导航栏中添加一个按钮,但无法做到。最终我设法掌握了一些工作代码,但我并不真正理解它。

步骤是:

  1. 确认 AppDelegate 到 UINavigationControllerDelegate
  2. 设置 rootNavigationController.delegate = self
  3. 覆盖 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];
      }
  }
4

1 回答 1

1

此代码可能处理UITabBarController使用UINavigationController. 该UITabBarController文档指出它需要是根视图控制器(即不在 aUINavigationController中)并且以其他方式使用它可能会导致问题。

代码似乎在做的是捕获通常传递给的事件viewController,检查它是否是 a UITabBarController,如果是,然后它检查可见视图是否UITabBarController响应此方法,如果响应,则传递方法(选择器) 呼吁该观点。

如果可能的话,我建议将其UITabBarController从嵌入到UINavigationController. 可能需要一些工作,但会使您的代码符合要求。(并消除对navigationController:willShowViewController:animated:

于 2012-11-09T19:45:54.397 回答