我有一些带导航栏和标签栏的视图控制器。然后我有一个初始视图控制器,没有导航栏和标签栏。我想回到初始视图控制器,堆栈中没有其他视图控制器。这是我的所作所为:
// Head back to Initial View Controller.
let initialViewController = self.storyboard!.instantiateViewController(withIdentifier: "Initial")
UIApplication.shared.keyWindow?.rootViewController = initialViewController
let appDelegate = UIApplication.shared.delegate as! AppDelegate
appDelegate.window?.rootViewController = initialViewController
这完美无缺。但是它不会再次从初始视图控制器移动到另一个视图控制器。例如:
@IBAction func loginButton(_ sender: Any) {
print("Login Button Tapped.")
let storyboard = UIStoryboard(name: "SignInViewController", bundle: nil)
let signInViewController = storyboard.instantiateViewController(withIdentifier: "SignInViewController") as! SignInViewController
self.navigationController?.show(signInViewController, sender: nil)
}
此处运行print语句,但self.navigationController.show
不会。这一切如何运作?什么是正确的方法来实现这一目标?
修改
为避免混淆,这是我的故事板。最左边的viewcontroller(粉红色屏幕)是我想要回到的初始视图控制器。同一级别的最右侧是我想要返回的视图。
答案 0 :(得分:1)
它不会移动到另一个视图控制器,因为您在rootViewController中设置了一个简单的视图控制器。
您需要的是:
let initialViewController = self.storyboard!.instantiateViewController(withIdentifier: "Initial")
let navController = UINavigationController.init(rootViewController: initialViewController)
UIApplication.shared.keyWindow?.rootViewController?.present(navController, animated: true, completion: nil)
这将创建一个navigationviewcontroller,因此在“Initial”时,您应该能够执行其他视图控制器的push,present动作。
答案 1 :(得分:0)
self.navigationController.popToRootViewController(animated:)
正是您要找的。 p>
修改强>
在致电navigationController
后尝试解除popToRoot
。
self.navigationController.dismiss(animated: true, completion: nil)
修改强>
尝试以下方法:
@IBAction func loginButton(_ sender: Any) {
print("Login Button Tapped.")
let storyboard = UIStoryboard(name: "SignInViewController", bundle: nil)
let signInViewController = storyboard.instantiateViewController(withIdentifier: "SignInViewController") as! SignInViewController
present(signInViewController, animated: true, completion: nil)
//self.navigationController?.show(signInViewController, sender: nil)
}
然后从signInViewController
内删除self?.navigationController.dismiss(animated:true, completion:nil)
来电signInViewController
。
答案 2 :(得分:0)
从初始视图控制器,您需要实例化导航堆栈并以模拟方式显示它。然后,当您想要返回导航前的初始VC时,只需致电dismiss(animated:,completion:)
,这将解除您的整个导航堆栈并返回初始视图控制器。