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このコードは、内でを使用して発生する問題に対処している可能性がありますUINavigationControllerUITabBarControllerドキュメントには、ルート ビュー コントローラである必要がある (つまり、 内ではないUINavigationController) 必要があり、他の方法で使用すると問題が発生する可能性があると記載されています。

コードが行っているように見えるのは、通常 に渡されるイベントをキャプチャし、viewControllerそれUITabBarControllerが であるかどうかをチェックし、そうである場合は、 の可視ビューがUITabBarControllerこのメソッドに応答するかどうかをチェックし、応答する場合はメソッド (セレクター) を渡します。 ) そのビューを呼び出します。

可能であれば、UITabBarControllerに埋め込まれているを引き出すことをお勧めしUINavigationControllerます。少し手間がかかるかもしれませんが、コードを準拠させます。(そして、navigationController:willShowViewController:animated:

于 2012-11-09T19:45:54.397 に答える