(迅捷)弹出回导航控制器



我将描述我想做什么。我有 3 个视图控制器。第一个应该是导航,我想我在代码中犯了错误。第一个 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时,应该打开第三个VC,它工作正常,这是代码:

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.
}

在这个按钮上点击第三个VC,我需要回到第一个VC,这就是我迷路的地方:

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

在 btnTap 中使用以下代码:

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) {
}

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

您正在展示导航控制器,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)

最新更新