我正在为一个iOS应用程序开发,该应用程序的视图控制器未连接到其他视图控制器。目前,我正在尝试获取一个按钮,以从用户登录后实例化的主视图控制器转移回登录/注册视图控制器。在用户登录后实例化的视图控制器未连接至其他视图控制器。我到达未连接的视图控制器的方式是
func transitionToHome()
{
let homeViewController = storyboard?.instantiateViewController(identifier: Constants.Storyboard.homeViewControllers) as? homeViewController
view.window?.rootViewController = homeViewController
view.window?.makeKeyAndVisible()}
我还将包含视图控制器的图像,以便更容易理解如何设置photo of the view controllers
我尝试挂钩“注销”按钮以过渡回登录/注册视图控制器,但是这会导致显示一个单独的较小场景,我可以滑开然后回到主视图控制器。我也尝试使用上面的代码转移回登录/注册视图控制器,但这引起了同样的问题。
答案 0 :(得分:1)
看起来您需要将view.window?.rootViewController重置为登录/注册视图控制器。像这样
view.window?.rootViewController = LoginViewController()
view.window?.makeKeyAndVisible()}
答案 1 :(得分:1)
尽管您可以在应用启动后交换rootViewController,但安排视图控制器可能更简单,因此它们都链接回到单个rootViewController。
如果您希望在应用程序的后续启动时跳过初始登录屏幕,则可以使登录视图控制器成为rootViewController,并且在不需要登录时直接在viewDidAppear()中跳转到主视图控制器。然后,您可以取消“注销”的顺序。
在应用程序委托中:
func application(_ application: UIApplication, didFinishLaunchingWithOptions launchOptions: [UIApplication.LaunchOptionsKey: Any]?) -> Bool {
let loginViewController = UIStoryboard(name: "Login", bundle: nil).instantiateInitialViewController()
self.window?.rootViewController = loginViewController
self.window?.makeKeyAndVisible()
}
然后在LoginViewController中:
func viewDidAppear(_ animated: Bool) {
super.viewDidAppear(animated)
if alreadyAuthenticated {
performSegue(withIdentifier: SegueIdentifier.goToMain, sender: self)
}
}
根据您的实际需求,其他类似的组合也是可能的。可能会有一些好处,因为您可以访问默认的演示文稿并关闭动画,而如果要交换rootViewController,将很难实现。