Методы UINavigationControllerDelegate не вызываются при открытии контроллера представления, который не поддерживает текущую ориентацию.
У меня есть UINavigationController в качестве корневого контроллера представления моего приложения (начального контроллера представления в моей раскадровке ).
Допустим, я нажимаю ViewController A с этим для ориентации:
- (BOOL)shouldAutorotateToInterfaceOrientation:(UIInterfaceOrientation)interfaceOrientation {
return (interfaceOrientation == UIInterfaceOrientationPortrait);
}
Следовательно, мы не поддерживаем ландшафтный режим. Кроме того, давайте нажмем еще один ViewController с кодом:
@interface B : UIViewController
@end
@implementation B
- (BOOL)shouldAutorotateToInterfaceOrientation:(UIInterfaceOrientation)interfaceOrientation {
return YES; // any orientation supported
}
- (void)viewDidLoad {
[super viewDidLoad];
AppDelegate *appDelegate = (AppDelegate *)[[UIApplication sharedApplication] delegate];
UINavigationController *nc = (UINavigationController*)appDelegate.window.rootViewController;
nc.delegate = self;
}
- (void)navigationController:(UINavigationController *)navigationController willShowViewController:(UIViewController *)viewController animated:(BOOL)animated {
// not always called...
}
- (void)navigationController:(UINavigationController *)navigationController didShowViewController:(UIViewController *)viewController animated:(BOOL)animated {
// not always called...
}
@end
Теперь, если мой iPhone находится в портретной ориентации, и я помещаю контроллер представления B поверх A через какое-то событие касания, а затем нажимаю кнопку «Назад» на панели навигации, все хорошо, и методы делегата называются (Я делаю там кое-что ).
Но если, когда я просматриваю вид B, я поворачиваюсь в альбомную ориентацию, а затем нажимаю кнопку «Назад», эти методы делегата не вызываются!! Какой смысл устанавливать делегат для UINavigationController, если методы вызываются иногда, а не иначе? Наверняка я что-то делаю не так.
Я пытаюсь поместить делегата в другой класс, например AppDelegate или мой MainView, ничего не меняется.
Есть идеи?
демонстрационный код здесь:git ://github.com/malaba/NavBarTest.git
Из базового шаблона Master -Detail, измененного так же, как указано выше.
Как показать свою точку зрения? Вот шаги -по -шаг:
Теперь попробуйте повернуть iPhone (или Симулятор )в подробном представлении, затем вернуться «назад» и увидеть журнал не отображается?!