Методы UINavigationControllerDelegate не вызываются (демонстрационный код на github)

Методы 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, измененного так же, как указано выше.

Как показать свою точку зрения? Вот шаги -по -шаг:

  1. Добавьте строку в основной вид (+ вверху справа )
  2. , затем коснитесь строки, чтобы перейти к подробному просмотру
  3. См. Отображение вывода входа в систему
  4. Нажмите кнопку «Назад» (с надписью «Мастер» ), снова появится журнал.

Теперь попробуйте повернуть iPhone (или Симулятор )в подробном представлении, затем вернуться «назад» и увидеть журнал не отображается?!

5
задан malaba 25 April 2012 в 10:44
поделиться