快速获取以前的 UIViewController
Posted
技术标签:
【中文标题】快速获取以前的 UIViewController【英文标题】:Getting previous UIViewController swift 【发布时间】:2017-06-17 11:39:53 【问题描述】:我想得到以前的viewController
。
当我从 navigation
菜单中选择任何行时,我有 2 个 UIViewControllers
和 navigationMenu
我想从打开菜单的位置获取 UIViewController 以移动到第二个 UIViewController
。
我想知道在这种情况下如何获取以前的UIViewController
我试过了,但数返回 nil
:
let n: Int! = self.navigationController?.viewControllers.count
print(n)
let myUIViewController = self.navigationController?.viewControllers[n-2] as! UIViewController
编辑:-
打开菜单代码
let menuButton = UIBarButtonItem.init(title :"open", style: .plain, target: self.revealViewController(), action: #selector(SWRevealViewController.revealToggle(_:)))
navigationItem.leftBarButtonItem = menuButton
【问题讨论】:
你用哪个库来做菜单? SWRevealViewController 好的,您只想在一个地方知道,或者您想从任何文件中知道? 我想知道如何从打开菜单的地方获取 ViewController 【参考方案1】:这就是以前viewController
的获取方式,查看cmets的解释:
// get all the viewControllers to start with
if let controllers = self.navigationController?.viewControllers
// iterate through all the viewControllers
for (index, controller) in controllers.enumerated()
// when you find your current viewController
if controller == self
// then you can get index - 1 in the viewControllers array to get the previous one
let myUIViewController = controllers[index-1]
print(controllers[index-1])
【讨论】:
我用这种方式打开菜单 let menuButton = UIBarButtonItem.init(title :"open", style: .plain, target: self.revealViewController(), action: #selector(SWRevealViewController.revealToggle(_ :))) navigationItem.leftBarButtonItem = menuButton 所以没有使用导航控制器,这就是 count 返回 nil 的原因,当我尝试您的代码时也没有打印任何内容 这是一个很好的答案,但在这种情况下并没有帮助我我写了我的答案(帮助我的方式)【参考方案2】:在 Second ViewController 中添加 First ViewController 类型的变量。
class SecondViewController : UIViewController
var previousVC = FirstViewController()
现在从 First ViewController 到 Second ViewController 执行 segue。
performSegue(withIdentifier: "to2nd", sender: self) //to2nd or Your Choice
在准备 segue 函数中,将您的 First view Controller 对象放入 target 。
override func prepare(for segue: UIStoryboardSegue, sender: Any?)
if segue.identifier == "to2nd" // Or you segue id name
if let target = segue.destination as? SecondViewController
target.previousVC = self
现在,当您需要以前的 ViewController 或其数据时,请使用 previousVC
【讨论】:
查看我不使用的编辑帖子为 segue 做准备我想在打开菜单的位置获取 UIViewController 你知道如何在objective c var previousVC = FirstViewController()中写这行【参考方案3】:如果您的 ViewController 嵌入到 NavigationController 中,您可以在第二个 VC 中使用标准的 popViewController 函数:
_ = navigationController?.popViewController(animated: true)
【讨论】:
【参考方案4】:我解决了我的问题,方法是将 UIViewController 从委托中打开菜单的位置保存,以便我可以从任何地方访问它
【讨论】:
@Rashwan L 这是我的答案【参考方案5】:斯威夫特 5.x
假设你在SecondViewController
,你想检查之前的视图控制器是否真的是FirstViewController
,那么你可以这样做:
if let prevIndex = self.navigationController?.viewControllers.firstIndex(where: $0 == self )?.advanced(by: -1)
if let prevVC = self.navigationController?.viewControllers[prevIndex], prevVC is FirstViewController
// do whatever you want with prevVC
【讨论】:
以上是关于快速获取以前的 UIViewController的主要内容,如果未能解决你的问题,请参考以下文章
快速解析时无法在json post请求参数中添加文本字段输入的文本
Git - 如何在不快速转发和合并为当前的情况下恢复以前的提交