0

У меня есть UINavigationController (A), который имеет несколько подпунктов, которые также являются UIViewControllers (B и C). Основной UINavigationController (A) проходит внутри UITabViewController (D).Откуда этот backBarButtonItem появился?

Я пытаюсь нажать на контроллер представления в B: [self.navigationController pushViewController... etc]

Теперь backBarButtonItem проступает с неправильным текстом. Вместо того, чтобы говорить «Назад», он просто говорит «Пункт». Вероятно, это связано с тем, что один из контроллеров представлений в моей цепочке имеет свой заголовок, заданный как «Item», или, может быть, это вообще ноль.

Мой вопрос: где работает backBarButtonItem?

Я пробовал несколько разных вещей, которые не сработали. Я пробовал каждую из этих строк кода внутри B до того, как я нажал на контроллер вида. Ни один из них не работал.

self.presentingViewController.backBarButtonItem = [[UIBarButtonItem alloc] initWithTitle:@"Back"... etc

self.backBarButtonItem = [[UIBarButtonItem alloc] initWithTitle:@"Back"... etc

self.navigationController.backBarButtonItem = [[UIBarButtonItem alloc] initWithTitle:@"Back"... etc

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

+0

Включен ли контроллер навигации? Если да, то где? Какие контроллеры просмотра являются дочерними элементами контроллера навигации? Какой контроллер представления является родительским элементом контроллера навигации, или он является контроллером корневого окна окна? –

+0

Неплохо, я исправил его и указал на UINavigationController, где он находится в цепочке. Благодаря! – Brett

ответ

2

Допустим, ваш контроллер C находится поверх стека контроллера навигационной системы, а ваш контроллер B находится под этим. Например.

navigationController.viewControllers = @[ bViewController, cViewController ]; 

Таким образом, навигационный контроллер отображает cViewController.view.

Контроллер навигации использует второй контроллер в своем стеке для настройки кнопки «Назад». В этом случае для настройки кнопки возврата используется bViewController. Это его алгоритм:

UINavigationItem *navigationItem = bViewController.navigationItem; 
UIBarButtonItem *barItem = navigationItem.backBarButtonItem; 

if (barItem.image != nil) { 
    show a back button containing barItem.image; 
} 

else if (barItem.title != nil) { 
    if (barItem.title.length > 0) { 
     show a back button containing barItem.title; 
    } else { 
     don't show a back button; 
    } 
} 

else if (navigationItem.title != nil) { 
    if (navigationItem.title.length > 0) { 
     show a back button containing navigationItem.title; 
    } else { 
     don't show a back button; 
    } 
} 

else { 
    show a back button containing @"Back"; 
} 
+0

Очень полезно, спасибо за эти детали. – Brett