Вопрос по ios – Добавление UIBarButtonItem ко всем контроллерам навигационного представления внутри UITabBarController программным способом

2

Структура выглядит следующим образом:

View Tab Bar Controller Navigation Controller View Controller Navigation Controller View Controller Navigation Controller View Controller Navigation Controller View Controller Navigation Controller View Controller Navigation Controller View Controller

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

То, что я пытаюсь сделать, это добавить правоUIBarButtonItem каждому навигационному контроллеру, но безуспешно.

Вот что я пробовал:

<code>- (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];
}
</code>

Код выполняется без каких-либо ошибок, но кнопка не появляется. Я уверен, что здесь что-то неправильно понял. Был бы признателен за некоторые рекомендации.

Как вам удалось вложитьUITabBarController внутриUIViewController в перо? Paul.s
Проверяли ли вы дочерние виды контроллера навигации при выборе элементов вкладки .... iDroid
Я вижу это по твоему коду .. Тем не менее, я не в моем MAC, поэтому, если вы регистрируете дочерние представления Navigation Controller, тогда мы можем просто подтвердить, что элементы кнопки все еще существуют или нет ... iDroid
@ Paul.s Я этого не делал! Это была ошибка в посте, исправленная сейчас. sooper
Зачем мне это делать? Я добавляю кнопку только в контроллер навигации. Все показывает нормально, только кнопки не добавляются. sooper

Ваш Ответ

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

When deploying a tab bar interface, you must install this view as the root of your window. Unlike other view controllers, a tab bar interface should never be installed as a child of another view controller.

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

dismissLibraryBrowser Функция Simple отклоняет модальный контроллер вида с[self dismissModalViewControllerAnimated:YES];, Хотя это работает нормально на первом контроллере представления каждой вкладки, оно не работает ни на одном из дополнительных контроллеров push-представлений на этой вкладке. Какие-нибудь мысли? sooper
Я не думал об этом (то есть модальном представлении), тогда я реструктурирую его. И спасибо за ваше решение! sooper

Похожие вопросы