以编程方式将UIBarButtonItem添加到UITabBarController内的所有导航视图控制器

结构如下:

  • 视图
  • 标签栏控制器
    • 导航控制器
      • 查看控制器
    • 导航控制器
      • 查看控制器
    • 导航控制器
      • 查看控制器
    • 导航控制器
      • 查看控制器
    • 导航控制器
      • 查看控制器
    • 导航控制器
      • 查看控制器

上述控制器已在接口构建器中初始化。

我要做的是为每个导航控制器添加一个正确的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]; } 

代码执行时没有任何错误,但按钮不会出现。 我确定我在这里误解了一些东西。 会很感激一些指导。

通过重新创建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的文档说

部署选项卡栏界面时,必须将此视图安装为窗口的根目录。 与其他视图控制器不同,标签栏界面不应该作为另一个视图控制器的子项安装。

所以我建议看看重组一些东西,如果你只是偶尔需要它,为什么不考虑以模态方式呈现呢?