2012-04-14 4 views
2

структура выглядит следующим образом:Добавление UIBarButtonItem всем Navigation View Controllers внутри UITabBarController программно

  • Просмотр
  • Tab Bar Controller
    • Навигационный контроллер
      • View Controller
    • Контроллер навигации
      • View Controller
    • Навигационный контроллер
      • View Controller
    • Навигационный контроллер
      • View Controller
    • Навигационный контроллер
      • View Controller
    • Навигационный контроллер
      • View Controller

Вышеуказанные контроллеры инициализирован в интерфейсе строителя.

Что я пытаюсь сделать, это добавить правый 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, поэтому, если вы регистрируете дочерние представления диспетчера навигации, мы просто можем подтвердить, что элементы кнопки все еще существуют или нет ... – iDroid

ответ

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 сказать

При развертывании интерфейса панели вкладок, необходимо установить это представление как корень вашего окна. В отличие от других контроллеров представлений интерфейс панели вкладок никогда не должен устанавливаться как дочерний элемент другого контроллера представления.

Поэтому я бы предложил взглянуть на реструктуризацию какого-либо материала, если вам это нужно только изредка, почему бы не рассмотреть возможность его представления модально?

+0

Не думал об этом (модальный вид, который есть), тогда я его реструктурирую. И спасибо за ваше решение! – sooper

+1

Функция 'rejectLibraryBrowser' просто отклоняет контроллер модального представления с помощью функции' [self rejectModalViewControllerAnimated: YES]; '. Хотя это прекрасно работает на первом контроллере представления каждой вкладки, он не работает ни в одном из дополнительных контроллеров с точечным представлением на этой вкладке. Есть предположения? – sooper

Смежные вопросы