【问题标题】:Is there a way to find out whether a view controller is popped off the navigation stack?有没有办法找出视图控制器是否从导航堆栈中弹出?
【发布时间】:2016-12-14 14:37:25
【问题描述】:

我试图检测视图控制器何时从导航堆栈中弹出,以某种方式我在堆栈的下一层有对控制器的引用(当前使用 Swift 3)。谢谢

【问题讨论】:

    标签: ios uiviewcontroller uinavigationcontroller


    【解决方案1】:

    UINavigationController 有一个属性viewControllers,其中包含当前在堆栈上的视图控制器数组。您可以获取视图控制器数组,然后从该数组中获取倒数第二个视图控制器:

    guard let navController = self.navigationController else {
      print("We are not part of a navigation stack!")
      return
    }
    let stack = navController.viewControllers
    let stackCount = stackCount
    if stackCount > 1 {
      let nextVC = viewControllers[stackCount - 2]
      //nextVC now contains the view controller one down from the current VC
    } else {
      //We are the root view controller
    }
    

    【讨论】:

    • 啊,搞定了,谢谢。只是想这也可以通过调用 willmovetoparent 而不是访问 viewcontrollers 数组来完成。
    • 我不相信导航控制器和他们的孩子的父/子关系被记录,所以我不会指望它。在未来的某些操作系统版本中,实施细节可能会发生变化,并破坏您的代码。
    • 同意,我已经实现了您的解决方案并将其添加到我的代码 sn-ps 中。谢谢!
    • 如果我的回答解决了你的问题,你应该接受它。支持是可选的,但值得赞赏。 :)
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-03-21
    • 2021-04-18
    相关资源
    最近更新 更多