iOS: как получить указатель на контроллер навигации - PullRequest
3 голосов
/ 12 октября 2011

Я явно что-то упускаю ...

В моем iOS-приложении я помещаю UIViewController на контроллер навигации:

MyViewController *mvc = [[MyViewController alloc] initWithNibName:@"MyViewController"];
[self.navigationController mvc animated:YES];

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

UINavigationController *nav = [self navigationController];
if (!nav) {
    NSLog(@"no nav");
}

Я весь день бился с этим, но не вижу, что я делаю что-то не так. Я не получаю предупреждений или ошибок в Xcode. Я что-то упустил полностью?

TIA: john

Ответы [ 2 ]

9 голосов
/ 12 октября 2011

navigationController не будет правильно установлен на viewDidLoad. Вы должны проверить это в viewDidAppear или на более позднем этапе. Какой метод вы вызываете [self navigationController] in?

Причина этого в том, что когда вызывается viewDidLoad, UINavigationController все еще обрабатывает метод pushViewController:animated:. Казалось бы, установить свойство navigationController после того, как инициализирует view контроллера. Я не могу вспомнить, установлено ли свойство к моменту времени viewWillAppear, но оно обязательно должно быть установлено viewDidAppear.

0 голосов
/ 06 октября 2014
id rootViewController = [[[[[UIApplication sharedApplication] keyWindow] subviews] objectAtIndex:0] nextResponder];
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...