我将描述我想做什么。我有 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)