В примерах, приведенных здесь, используется метод делегата navigationController: willShowViewController: animated: do work, но может случиться так, что вы захотите добавить свой собственный элемент навигации в свои собственные контроллеры, и указанные параметры будут удалять все, что вы могли бы установить ваши собственные контроллеры. Вот код, который я успешно использовал, чтобы эта опция работала хорошо:
- (void)navigationController:(UINavigationController *)navigationController
willShowViewController:(UIViewController *)viewController
animated:(BOOL)animated {
// Here we want to remove the 'Cancel' button, but only if we're showing
// either of the ABPeoplePickerNavigationController's top two controllers
if ([navigationController.viewControllers indexOfObject:viewController] <= 1) {
viewController.navigationItem.rightBarButtonItem = nil;
}
}
Обратите внимание, что в стеке контроллера навигации есть два контроллера представления: один для групп контактов и один для списка контактов. Вот почему мы не можем просто проверить, является ли viewController контроллером вида сверху контроллера навигации.