我有几个带有导航栏和标签栏的 View Controller 。然后我有一个没有导航栏和标签栏的初始 View Controller 。我想回到堆栈中没有其他 View Controller 的初始 View Controller 。这是我的做法:
// 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
这非常有效。但随后它不会再次从初始 View Controller 移动到另一个 View Controller 。例如:
@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)
}
此处,打印语句运行,但 self.navigationController.show
不会。这一切是如何运作的?实现这一目标的正确方法是什么?
编辑:
为避免混淆,这是我的 Storyboard。最左边的 View Controller (粉红色屏幕)是我想要返回的初始 View Controller 。同一层最右边是我要返回的 View 。
最佳答案
它不会移动到另一个 View Controller ,因为您在 rootViewController 中设置了一个简单的 View Controller 。
你需要的是:
let initialViewController = self.storyboard!.instantiateViewController(withIdentifier: "Initial")
let navController = UINavigationController.init(rootViewController: initialViewController)
UIApplication.shared.keyWindow?.rootViewController?.present(navController, animated: true, completion: nil)
这将创建一个导航 View Controller ,因此当处于“初始”状态时,您应该能够执行推送、显示另一个 View Controller 的操作。
关于ios - 如何以正确的方式回到初始的 ViewController?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45197385/