Ios 从NavigationController返回按钮返回多个ViewController
单击NavigationController上的“后退”按钮时,我想返回两个ViewController,而不是一个Ios 从NavigationController返回按钮返回多个ViewController,ios,swift,uinavigationcontroller,poptoviewcontroller,Ios,Swift,Uinavigationcontroller,Poptoviewcontroller,单击NavigationController上的“后退”按钮时,我想返回两个ViewController,而不是一个 override func viewWillDisappear(_ animated: Bool) { super.viewWillDisappear(animated) if self.isMovingFromParent { let vc = self.navigationControlle
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]
→ VC[2]
→ VC[3]
从3我想直接回到1,而不必显示2。我想从NavigationController返回按钮执行此操作。如果堆栈中有viewController,则可以使用类名返回到它
let viewControllers: [UIViewController] = self.navigationController!.viewControllers ;
for aViewController in viewControllers {
if(aViewController is HomeViewController){
self.navigationController!.popToViewController(aViewController, animated: true);
}
}
您可以为此使用展开分段 尝试将此代码放入要返回的
UIViewController
@IBAction func unwindHere(segue:UIStoryboardSegue) {}
转到情节提要,查找要返回的viewController(本例中为VC3),然后按住CTRL键并将视图控制器图标拖动到退出图标。这将显示unwindHere
选择VC3左侧面板中的unwind here
unwind segue,为其指定标识符名称,例如unwindSegueToVC1
创建一个函数,该函数将使用标识符名称执行segue,以释放到所需的视图控制器(VC1)
谢谢,但我认为这与我的解决方案没有太大区别。我的问题是NavigationController back会立即显示堆栈中最顶层的ViewController,这正是我试图避免的。设置新的NavigationBarButton是可行的,但它会更改back按钮的样式,以便仅使用
self.NavigationController?.navigationItem.LeftBarButtonim?.action=#选择器删除该按钮(unwindToFirstViewController)
在设置导航栏
功能中
override func viewDidLoad() {
super.viewDidLoad()
setupNavigationBar()
}
@objc func unwindToFirstViewController() {
performSegue(withIdentifier: "unwindSegueToVC1", sender: self)
}
func setupNavigationBar() {
self.navigationController?.navigationItem.leftBarButtonItem?.action = #selector(unwindToFirstViewController)
}