2012-04-14 8 views
2

構造は次のとおりです。UITabBarController内のすべてのナビゲーションビューコントローラにUIBarButtonItemを追加するプログラムで

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

上記コントローラは、インターフェイスビルダーに初期化されています。

私がしようとしているのは、各ナビゲーションコントローラに正しく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]; 
} 

コードがエラーなしで実行されますが、ボタンは表示されません。

は、ここで私が試したものです。私はここで何か誤解していると確信しています。いくつかの指導を感謝します。

+0

タブ項目を選択しているときにナビゲーションコントローラの子ビューを確認しましたか... – iDroid

+0

なぜそれをする必要がありますか?私は、ナビゲーションコントローラにのみボタンを追加しています。すべてがうまく表示され、ボタンだけが追加されません。 – sooper

+0

私はあなたのコードからそれを見ます..まだ私は私のMACにはないので、Navigation Controllerの子ビューをログすると、ボタンアイテムがまだ存在しているかどうかを確認できます。 – iDroid

答えて

3

viewControllerと一時配列を再作成すると、少し複雑になります。あなただけのペン先のアプリの構造については

[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のためのドキュメントは、タブバーのインタフェースを展開する場合、あなたがインストールする必要があり

を言いますこのビューはウィンドウのルートとして表示されます。他のビューコントローラとは異なり、タブバーインタフェースは、別のビューコントローラの子としてインストールされるべきではありません。

私はいくつかのものをリストラしてみることをお勧めします。

+0

それは考えていませんでした(それはモーダルビューです)、私はそれを再構成します。あなたのソリューションに感謝します! – sooper

+1

'dismissLibraryBrowser'関数は' [self dismissModalViewControllerAnimated:YES];でモーダルビューコントローラを単純に終了します。これはすべてのタブの最初のビューコントローラーで正常に機能しますが、そのタブの追加のプッシュビューコントローラーでは機能しません。何かご意見は? – sooper

関連する問題