UINavigationController:willShowViewController 问题

Posted

技术标签:

【中文标题】UINavigationController:willShowViewController 问题【英文标题】:UINavigationController:willShowViewController Question 【发布时间】:2011-09-14 19:13:43 【问题描述】:

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

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

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

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

【讨论】:

以上是关于UINavigationController:willShowViewController 问题的主要内容,如果未能解决你的问题,请参考以下文章