UINavigationController:willShowViewController问题

时间:2011-09-14 19:13:44

标签: iphone ios cocoa-touch uinavigationcontroller

我对此委托消息感到困惑。我在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 个答案:

答案 0 :(得分:5)

UINavigationController Class Reference中进行了一些挖掘,看起来您可以使用viewControllers类的UINavigationController属性。

根视图控制器(导航堆栈的底部)位于索引0,后面的视图控制器(刚被覆盖的控制器)位于索引n-2和{{3} }属性位于索引n-1,其中n是数组中视图控制器的数量。

从iOS 7和Xcode 5.x开始,您现在可以将firstObject消息发送到viewControllers属性返回的数组,以获取根视图控制器。同样,可以通过将topViewController消息发送到lastObject属性返回的数组来访问viewControllers属性。