从 NavigationController 后退按钮返回多个 ViewController
Posted
技术标签:
【中文标题】从 NavigationController 后退按钮返回多个 ViewController【英文标题】:Go back multiple ViewControllers from NavigationController back button 【发布时间】:2019-09-02 15:23:51 【问题描述】:当我单击 NavigationController 上的后退按钮时,我想返回两个 ViewController 而不是一个。
override func viewWillDisappear(_ animated: Bool)
super.viewWillDisappear(animated)
if self.isMovingFromParent
let vc = self.navigationController?.viewControllers[1] as! MyViewController
self.navigationController?.popToViewController(vc, animated: false)
这几乎是我想要的方式。更改 self.navigationController?.viewControllers[1] 可以让我转到堆栈中的任何 ViewController。我唯一的问题是它总是在直接进入我弹出的 ViewController 之前短暂地显示最顶层的 viewController。如何阻止它显示中间 ViewController?
我的问题是:
VC[0] → VC[1] → 风险投资[2] → VC[3]
从 3 我想直接返回到 1 而不必显示 2。我想从 NavigationController 后退按钮执行此操作。
【问题讨论】:
【参考方案1】:如果堆栈中有 viewController,则可以使用类名返回到它。
let viewControllers: [UIViewController] = self.navigationController!.viewControllers ;
for aViewController in viewControllers
if(aViewController is HomeViewController)
self.navigationController!.popToViewController(aViewController, animated: true);
【讨论】:
谢谢,但我认为这与我的解决方案没有太大区别。我的问题是 NavigationController 返回会暂时显示堆栈中最顶层的 ViewController,这是我试图避免的。【参考方案2】:您可以为此使用展开转场
尝试将此代码放入您要返回的UIViewController
@IBAction func unwindHere(segue:UIStoryboardSegue)
转到情节提要并查找要返回的视图控制器(在您的情况下为 VC3),然后 CTRL + 拖动 视图控制器图标 到 退出图标强>。这将显示unwindHere
在 VC3 的左侧面板中选择 unwindHere
unwind segue 为其指定一个标识符名称,例如unwindSegueToVC1
创建一个函数,该函数将使用标识符名称执行 segue,以展开到您想要的视图控制器 (VC1)
override func viewDidLoad()
super.viewDidLoad()
setupNavigationBar()
@objc func unwindToFirstViewController()
performSegue(withIdentifier: "unwindSegueToVC1", sender: self)
func setupNavigationBar()
self.navigationController?.navigationItem.leftBarButtonItem?.action = #selector(unwindToFirstViewController)
【讨论】:
设置一个新的 NavigationBarButton 是可行的,但它会更改后退按钮的样式以删除 尝试在setupNavigationBar
函数中只使用self.navigationController?.navigationItem.leftBarButtonItem?.action = #selector(unwindToFirstViewController)
以上是关于从 NavigationController 后退按钮返回多个 ViewController的主要内容,如果未能解决你的问题,请参考以下文章
iOS 禁用 NavigationController 后退按钮的动画
iOS 5中缺少navigationController栏后退按钮