Ios (Swift)弹回到导航控制器

Ios (Swift)弹回到导航控制器,ios,swift,uiviewcontroller,uinavigationcontroller,popviewcontroller,Ios,Swift,Uiviewcontroller,Uinavigationcontroller,Popviewcontroller,我将描述我想做什么。我有3个视图控制器。第一个应该是导航一,我想我在代码中犯了错误。 第一个VC指向第二个VC,第二个VC指向第三个VC。第三个VC有一个按钮,该按钮应指向第一个VC 以下是我如何从第一个VC演示第二个VC: let mainStoryboard = UIStoryboard(name: "Main", bundle: Bundle.main) let secondVC = (mainStoryboard.instantiateViewController(withIdentif

我将描述我想做什么。我有3个视图控制器。第一个应该是导航一,我想我在代码中犯了错误。
第一个VC指向第二个VC,第二个VC指向第三个VC。第三个VC有一个按钮,该按钮应指向第一个VC

以下是我如何从第一个VC演示第二个VC:

let mainStoryboard = UIStoryboard(name: "Main", bundle: Bundle.main)
let secondVC = (mainStoryboard.instantiateViewController(withIdentifier: "SecondViewController") as! SecondViewController)   
presentVC(SecondVC)

func presentVC(_ VC: UIViewController) {
        let navController = UINavigationController(rootViewController: VC)
        navController.modalPresentationStyle = .fullScreen
        self.navigationController?.present(navController, animated: true, completion: nil)
    }
现在在第二个VC中,当我在右导航栏中单击
Close
时,应该会打开第三个DVC,它工作正常,下面是代码:

ViewDidLoad
中:

 self.navigationItem.rightBarButtonItem = UIBarButtonItem(title: "Close", style: .plain, target: self, action:
#selector(closeSecondVC))
及之后:

  @objc
    func closeSecondVC() {
    let mainStoryboard = UIStoryboard(name: "Main", bundle: Bundle.main)
            let thirdVC = (mainStoryboard.instantiateViewController(withIdentifier: "ThirdViewController") as! ThirdViewController)
            presentVC(thirdVC) //Same function as above.
}
在这个按钮上点击第三个DVC,我需要返回到firstVC,这就是我迷路的地方:

 @IBAction func btnTapped(_ sender: Any) {
        if let navController = self.navigationController {
            navController.popViewController(animated: true)
        }  //nothing happens on click
    }

在btntaped中使用以下代码:

    for controller in self.navigationController!.viewControllers as Array 
    {
      // here YourViewController is your firstVC      
     if controller.isKind(of: YourViewController.self) {
            self.navigationController!.popToViewController(controller, animated: true)
            break
        }
    }

并且不显示视图,将视图推到弹出窗口。

使用以下代码:

    for controller in self.navigationController!.viewControllers as Array 
    {
      // here YourViewController is your firstVC      
     if controller.isKind(of: YourViewController.self) {
            self.navigationController!.popToViewController(controller, animated: true)
            break
        }
    }

不要显示视图将视图推到弹出窗口。

当您显示任何视图控制器时,您需要将其关闭,而不是弹出窗口!当您在此时按下任何视图控制器时,您可以弹出,但在这里您显示的是视图控制器,在这种情况下,您应该如下所示关闭它

dismiss(animated: true) {

    }

或者你应该推新的视图控制器,然后你可以弹出它

当您演示任何视图控制器时,您需要关闭它,而不是弹出!当您在此时按下任何视图控制器时,您可以弹出,但在这里您显示的是视图控制器,在这种情况下,您应该如下所示关闭它

dismiss(animated: true) {

    }

或者你应该推新的视图控制器,然后你可以弹出它

您正在演示导航控制器,
navController.popViewController()
将无法工作

尝试使用

self.navigationController?.pushViewController(vc, animated: true)
现在,如果您想从
ViewController3
转到
ViewController1
试试

for controller in self.navigationController!.viewControllers as Array {
    if !controller.isKind(of: ViewController1.self) {
        self.navigationController!.popToViewController(controller, animated: true)
    } 
 else{
     break;
  }
}

您正在演示导航控制器,
navController.popViewController()
将无法工作

尝试使用

self.navigationController?.pushViewController(vc, animated: true)
现在,如果您想从
ViewController3
转到
ViewController1
试试

for controller in self.navigationController!.viewControllers as Array {
    if !controller.isKind(of: ViewController1.self) {
        self.navigationController!.popToViewController(controller, animated: true)
    } 
 else{
     break;
  }
}

您需要调用此函数以返回到第一个ViewController:

self.navigationController?.popToRootViewController(animated: true)

您需要调用此函数以返回到第一个ViewController:

self.navigationController?.popToRootViewController(animated: true)

如果我解散第三个VC,它会让我回到第二个VC。我想回到第一个VC。然后按下一个新的视图控制器并调用
self.navigationController?.popToRootViewController(动画:true)
转到初始视图控制器!不要每次都让navController=UINavigationController(rootViewController:VC)!您应该将导航控制器嵌入根视图控制器一次!你应该在谷歌上搜索导航控制器教程,你会发现很多教程。例如,如果我解雇了第三个VC,它会让我回到第二个VC。我想回到第一个VC。然后按下一个新的视图控制器并调用
self.navigationController?.popToRootViewController(动画:true)
转到初始视图控制器!不要每次都让navController=UINavigationController(rootViewController:VC)!您应该将导航控制器嵌入根视图控制器一次!你应该在谷歌上搜索导航控制器教程,你会发现很多教程。例如,它不起作用。我可能应该在任何地方使用push,但我无法摆脱push附带的左侧navBarItem。要弹出,你必须按下,你可以在push上隐藏navBarItem,这非常简单。好的,我将尝试使用从firstVC到secondVC的push,以及从secondVC到thirdVC的push。然后我能从第三个跳转到第一个vc吗?它不工作。我可能应该在任何地方使用push,但我无法摆脱push附带的左侧navBarItem。要弹出,你必须按下,你可以在push上隐藏navBarItem,这非常简单。好的,我将尝试使用从firstVC到secondVC的push,以及从secondVC到thirdVC的push。然后我能从第三位跳到第一位吗?