有没有办法找出视图控制器是不是从导航堆栈中弹出?

Posted

技术标签:

【中文标题】有没有办法找出视图控制器是不是从导航堆栈中弹出?【英文标题】: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)。谢谢

【问题讨论】:

【参考方案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 中。谢谢! 如果我的回答解决了你的问题,你应该接受它。支持是可选的,但值得赞赏。 :)

以上是关于有没有办法找出视图控制器是不是从导航堆栈中弹出?的主要内容,如果未能解决你的问题,请参考以下文章

从导航堆栈中弹出视图控制器时从右侧滑入

从堆栈中弹出导航控制器/创建双视图

为啥从导航堆栈中弹出视图时键盘不显示?

UICollectionView 调用 scrollViewDidScroll:从导航堆栈中弹出时

如何在不使用导航栏的情况下从导航堆栈中弹出控制器

SwiftUI - 如何在 SwiftUI 中弹出到特定视图?