UINavigation контроллер с нижней панелью инструментов теряет UIBarButtonItems при переключении вида

У меня есть контроллер навигации, созданный программно для обработки переключения между представлениями UISegmentedControl. (называемый сегменты NavigationController)

Контроллер навигации имеет нижнюю панель инструментов с парой UIBarButtonItems, которые также были добавлены программно. Чтобы справиться с переключателем, у меня есть следующий фрагмент кода:

- (void)indexDidChangeForSegmentedControl:(UISegmentedControl *) aSegmentedControl {
NSUInteger index = aSegmentedControl.selectedSegmentIndex;

if( index == 0 ) {
    OneViewController *oneViewController = nil;

    if( (oneViewController = [self.viewControllers objectForKey:@"one"]) == nil ) {
        oneViewController = [[OneViewController alloc] init];
        [self.viewControllers setObject:oneViewController forKey:@"one"];
        [oneViewController release];
    }
    NSArray *theViewControllers = [NSArray arrayWithObject:oneViewController];
    [self.segmentsNavigationController setViewControllers:theViewControllers animated:YES];
}
else if( index == 1 ) {
    TwoViewController *twoViewController = nil;

    if( (twoViewController = [self.viewControllers objectForKey:@"two"]) == nil ) {
        twoViewController = [[RelatedArticlesViewController alloc] init];
        [self.viewControllers setObject:twoViewController forKey:@"two"];
        twoViewController.hidesBottomBarWhenPushed = YES;

        [twoViewController release];
    }

    NSArray *theViewControllers = [NSArray arrayWithObject:twoViewController];      
    [self.segmentsNavigationController setViewControllers:theViewControllers animated:YES];     
}

}

Так что в конечном итоге, когда я переключаюсь с одного вида на другой и обратно, все мои UIBarButtons в нижней панели контроллера навигации теряются. Это почему? Я делаю что-то неправильно?

1 ответ

Решение

После некоторых поисков я понял, что использую UINavigationController неправильно.

Панель инструментов контроллера навигации является частью навигационного представления, отображаемого внутри, а не родительского элемента. (Мне потребовалось некоторое время, чтобы понять это!) Я создавал кнопки в том же контроллере, в котором я создавал сегменты NavigationController, а не внутри oneViewController, где я должен был располагать.

Перемещение кода в OneViewController и установка панели инструментов следующим образом:

    [self setToolbarItems: [[NSArray alloc] initWithObjects: button1, button2, nil] animated: NO];

сделал трюк!

Другие вопросы по тегам