ios - 通过弹出 navigationController 或使用选项卡栏来识别是否到达 viewController 的更好方法

标签 ios uiviewcontroller uinavigationcontroller uitabbarcontroller pushviewcontroller

尝试澄清:我希望能够区分以下两种情况:

  • 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/

相关文章:

ios - 在 applicationWillEnterForeground 之前更改 View

ios - 在对象上找不到属性 'tableView'

ios - show segue 后我的 viewcontroller 没有被取消初始化

iphone - 在 WiFi 重新连接和设备重新启动 (iOS) 上维护 VoIP 套接字?

ios - 通过自定义 Segue 将 ViewController 嵌入容器 View (有点像替换 segues)

ios - 在transitionFromViewController中传递数据

ios - 在 Swift 上弹出 ViewController

uiviewcontroller - 切换到另一个 View ,但保留在导航 Controller 中

javascript - 错误 : TypeError: Object has no method 'set'

ios - swift 这些协议(protocol)有什么区别