Навигация Three20 с помощью openURLAction; self.navigationController равен нулю в нажатом VC?

Навигация начинается с [[TTNavigator navigator] openURLAction:theUrl]; от одного контроллера UIviewController, а другой UIViewController является целью этого URL-адреса. Карта устанавливается с помощью set со следующим кодом, и нет сомнений, что навигация идет в нужное место:

TTURLMap* map = navigator.URLMap;
[map from:@"tt://goToMyViewController" toViewController:[MyViewControllerClass class]];

В нажатом контроллере представления я хочу манипулировать изображением на кнопке «Назад», но не хочу менять заголовок. Это всегда должен быть заголовок контроллера представления, на который он был помещен поверх, или локализованное «Назад», если заголовок не был установлен.

Проблема: в этом viewDidLoad контроллера представления, с которого я нажимаю, я начинаю с

NSArray* viewControllers = self.navigationController.viewControllers;

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

Однако, если я ничего не делаю, кнопка «Назад» по умолчанию имеет правильный заголовок. Я думал взглянуть на свойства title leftBarButtonItem и backBarButtonItem, но там тоже нет ничего значимого...

Кто-нибудь знает, что происходит, почему это происходит или как это можно обойти?


person Adam Eberbach    schedule 15.09.2010    source источник


Ответы (1)


Это одна из тех вещей, где viewDidLoad - неправильное место для этого - после сравнения различных контроллеров представления и не найдя реальной разницы в том, как они вызываются (но не было viewControllers, а другие нет), я понял, что если это действительно было nil, popViewControllerAnimated тоже не должно работать. Я обнаружил, что viewControllers НЕ было нулем, когда я звонил popViewControllerAnimated, и оттуда эксперимент показал, что я могу получить титул, который мне нужен, в viewWillAppear:. Таким образом, viewWillAppear: кажется надежным местом для прикосновения к self.navigationController, а viewDidLoad — нет.

person Adam Eberbach    schedule 16.09.2010
comment
Знаешь почему сейчас? Странное поведение, не так ли? - person CedricSoubrie; 29.05.2011