UINavigationController: willShowViewController Вопрос - PullRequest
4 голосов
/ 14 сентября 2011

Я запутался с этим сообщением делегата. У меня есть контроллер навигации в PopupViewController. Когда я нажимаю новый viewController, я не хочу знать, что такое viewController, который отображается в данный момент, до того, как новый будет нажат ...

Я пытался получить navigationController.topViewController & navigationController.visibleViewContrller, но оба они всегда равны viewController, который будет выдвинут ... Похоже, я получаю сообщение после вид был выдвинут

- (void)navigationController:(UINavigationController *)navigationController willShowViewController:(UIViewController *)viewController animated:(BOOL)animated{
   UIViewController *currentViewController = navigationController.topViewController;
    if(currentViewController == viewController){
      /// THIS IF STATEMENT IS ALWAYS TRUE 
    }
}

Кто-нибудь сталкивался с чем-то подобным?

1 Ответ

5 голосов
/ 14 сентября 2011

Немного покопался в справочнике классов UINavigationController и похоже, что вы можете использовать свойство viewControllers класса UINavigationController.

Контроллер корневого представления (нижняя часть стека навигации) имеет индекс 0 с контроллером заднего вида (только что покрытым) с индексом n-2 и topViewController* 1015. * свойство с индексом n-1, где n - количество контроллеров представления в массиве.

Начиная с iOS 7 и Xcode 5.x, теперь вы можете отправлять сообщение firstObject в массив, возвращаемый свойством viewControllers, чтобы получить корневой viewcontroller. Аналогично, к свойству topViewController можно получить доступ, отправив сообщение lastObject в массив, возвращаемый свойством viewControllers.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...