Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/swift/20.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ios 从NavigationController返回按钮返回多个ViewController_Ios_Swift_Uinavigationcontroller_Poptoviewcontroller - Fatal编程技术网

Ios 从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

单击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] → 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)

}