尝试澄清:我希望能够区分以下两种情况:
- viewController 的 View 因弹出而变得活跃。
- viewController 的 View 由于 tabBar 导航而变得活跃
在我正在开发的应用程序中,我需要知道是否由于导航 Controller 被弹出而呈现了 View Controller 。我看了这个post并认为我通过简单地调用就找到了解决方案:
BOOL wasReachedByPopping = !self.isMovingToParentViewController;
在我的viewWillAppear:
方法中
这在大多数情况下都可以正常工作,但不幸的是,当通过 tabBarController 切换导航 Controller 时,会出现误报。我一直在考虑向我的 viewController 添加一个名为 PushNewController 的 BOOL
,在推送之前将其设置为 YES。
self.pushedNewController = YES; // whenever I plan to push
这应该工作得很好,但我真的很不高兴必须将其基于像持久的 BOOL 状态这样困惑的东西。任何人都有更好的方法来确定 viewController 是否被弹出到达?
编辑:我很欣赏下面的努力,但它们似乎只是提供了我已经拥有的完全相同的功能。没有方法可以区分通过选项卡栏导航弹出或移动到。看来我必须选择一个内部 BOOL 来存储 viewController 是否请求推送。对于任何感兴趣的人,我按照以下方式进行设置:
- (void)viewDidDisappear:(BOOL)animated{
self.disappearedDueToPush = (self != [self.navigationController.viewControllers lastObject]);
}
最佳答案
你看过UINavigationControllerDelegate
方法了吗:
– navigationController:willShowViewController:animated:
– navigationController:didShowViewController:animated:
当 View Controller 被插入导航堆栈或从导航堆栈弹出时,将调用这些函数。
参见Apple docs了解更多信息。
关于ios - 通过弹出 navigationController 或使用选项卡栏来识别是否到达 viewController 的更好方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21578515/