2

構造は次のとおりです。

  • 意見
  • タブバーコントローラー
    • ナビゲーションコントローラー
      • ビューコントローラ
    • ナビゲーションコントローラー
      • ビューコントローラ
    • ナビゲーションコントローラー
      • ビューコントローラ
    • ナビゲーションコントローラー
      • ビューコントローラ
    • ナビゲーションコントローラー
      • ビューコントローラ
    • ナビゲーションコントローラー
      • ビューコントローラ

上記のコントローラーは、InterfaceBuilderで初期化されています。

私がやろうとしているのは、UIBarButtonItem各ナビゲーションコントローラーに権利を追加することですが、成功していません。

これが私が試したことです:

- (void)viewDidLoad
{
    [super viewDidLoad];

    self.view.backgroundColor = [UIColor clearColor];
    self.view.opaque = NO;
    self.tabBarController.view.frame = self.view.bounds;

    NSArray *currentViewControllers = self.tabBarController.viewControllers;
    NSMutableArray *updatedViewControllers = [NSMutableArray array];

    for (int i=0; i<currentViewControllers.count; i++) {
        UINavigationController *tempNav = [[UINavigationController alloc]init];
        tempNav = [currentViewControllers objectAtIndex:i];
        UIBarButtonItem *dismissButton = [[UIBarButtonItem alloc] 
                                          initWithTitle:@"Done"                                            
                                          style:UIBarButtonItemStyleBordered 
                                          target:self 
                                          action:@selector(dismissLibraryBrowser)];
        tempNav.navigationItem.rightBarButtonItem = dismissButton;
        [updatedViewControllers addObject:tempNav];
        [dismissButton release];
        [tempNav release];

        NSLog(@"Added controller number %d",i);
    }

    self.tabBarController.viewControllers = [NSArray arrayWithArray:updatedViewControllers];

    [self.view addSubview:tabBarController.view];
}

コードはエラーなしで実行されますが、ボタンは表示されません。私はここで何かを誤解したと確信しています。いくつかのガイダンスをいただければ幸いです。

4

1 に答える 1

3

viewControllersと一時配列を再作成することで、物事を少し複雑にしすぎています。ペン先からロードされたオブジェクトを操作する必要があります

[self.tabBarController.viewControllers enumerateObjectsUsingBlock:^(UINavigationController *navigationController, NSUInteger idx, BOOL *stop) {

    UIViewController *rootViewController = [navigationController.viewControllers objectAtIndex:0];

    UIBarButtonItem *rightBarButtonItem  = 
      [[UIBarButtonItem alloc] initWithTitle:@"Done"                                            
                                       style:UIBarButtonItemStyleBordered 
                                      target:self 
                                      action:@selector(dismissLibraryBrowser)];

    rootViewController.navigationItem.rightBarButtonItem = rightBarButtonItem;

 }];

アプリの構造については、UITabBarControllerのドキュメントには次のように書かれています。

タブバーインターフェイスを展開するときは、このビューをウィンドウのルートとしてインストールする必要があります。他のViewControllerとは異なり、タブバーインターフェイスを別のViewControllerの子としてインストールしないでください。

だから私はいくつかのものを再構築することを検討することをお勧めします、あなたがそれをたまにしか必要としないのなら、なぜそれをモーダルに提示することを考えないのですか?

于 2012-04-14T23:51:50.250 に答える