如何从未连接到其他视图控制器的视图控制器转移回视图控制器?

时间:2020-04-02 05:14:23

标签: ios xcode

我正在为一个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

我尝试挂钩“注销”按钮以过渡回登录/注册视图控制器,但是这会导致显示一个单独的较小场景,我可以滑开然后回到主视图控制器。我也尝试使用上面的代码转移回登录/注册视图控制器,但这引起了同样的问题。

2 个答案:

答案 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,将很难实现。