UINavigationController:willShowViewController:导航控制器将显示视图控制器的问题

4

我对这个委托消息感到困惑。我在一个PopupViewController中有一个导航控制器。当我推入一个新的viewController时,我想知道当前正在显示的是哪个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

我在UINavigationController类参考资料中进行了一些调查,看起来您可以使用viewControllers属性来访问UINavigationController类。

根视图控制器(导航堆栈的底部)的索引为0,后退视图控制器(刚刚被覆盖的视图控制器)的索引为n-2topViewController属性的索引为n-1,其中n是数组中视图控制器的数量。

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


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接