【问题标题】:How can I change the rootViewController to a VC that has not been loaded yet?如何将 rootViewController 更改为尚未加载的 VC?
【发布时间】:2018-01-05 16:29:29
【问题描述】:

想象一个像 Twitter 这样的应用程序,一旦您在其中登录,您将永远不会再看到登录屏幕,直到您退出。我通过在启动时更改 appDelegate 中的初始 viewController 来做到这一点。但是,当要退出时,堆栈中的新 VC 下方现在没有任何内容可以关闭。如何在初始视图加载后正确地将登录屏幕设置为 rootViewController,以便在注销时关闭?

在 appDelegate 中,我更改了 initialVC,如下所示:

        let storyboard = UIStoryboard(name: "Main", bundle: nil)
        let initialViewController = storyboard.instantiateViewController(withIdentifier: "RootVC")
        self.window?.rootViewController = initialViewController

然后我想基本上将 signInVC 插入到我的初始 VC 下方,以便我可以“解雇”它。

【问题讨论】:

  • 我不确定 Twitter 的登录屏幕是什么样的,但它会不会只是一个视图而不是 ViewController?
  • 我并不想完全模仿 Twitter,但他们就是这样做的。基本上我希望在堆栈底部登录 VC,但仅在启动之后。
  • @Cody Lucas 当您登录时,您正在将根视图控制器更改为其他一些控制器,换句话说,这就是现在的入口点。我会说在注销时将入口点更改回登录控制器。要识别登录状态,您可以将 bool 值保存在用户默认值中。
  • @TusharSharma 目前我正在尝试在注销时更改根 vc,但不是将其关闭,而是将该 vc 放在堆栈的顶部。
  • @Cody Lucas 您是否使用与上述相同的代码?这次使用标识符和控制器作为登录名。ex-:让 loginlViewController = storyboard.instantiateViewController(withIdentifier: "loginIdentifier") 作为 loginController 并将根更新为 -: window.rootViewController = loginlViewController。但是要从注销屏幕访问根窗口,您需要获取应用委托参考。

标签: ios swift3 uiviewcontroller uistoryboard


【解决方案1】:

取一个名为 signup_status 的布尔值并将其存储在 UserDefaults.standard 中并将其设置为 false

当用户登录时将此值更改为true,并且当他注销时将此值更改为false

现在在 AppDelegate 中检查用户是否登录

  if UserDefaults.standard.bool(forKey: "signup_status"){

  //if true the dont show login page and make home screen root view controller


      let storyBoard : UIStoryboard = UIStoryboard(name: "Main", bundle:nil)

        let viewController = storyBoard.instantiateViewController(withIdentifier: "homepage") as! homepageViewController
        let appDelegate = UIApplication.shared.delegate as! AppDelegate
        appDelegate.window?.rootViewController = viewController 




  }else {


 let storyBoard : UIStoryboard = UIStoryboard(name: "Main", bundle:nil)

        let viewController = storyBoard.instantiateViewController(withIdentifier: "login") as! login
        let appDelegate = UIApplication.shared.delegate as! AppDelegate
        appDelegate.window?.rootViewController = viewController 



 }

现在退出

将 UserDefaults.standard 的值设置为 key signup_status false

     UserDefaults.standard.set(false, forKey: "signup_status")
     let storyBoard : UIStoryboard = UIStoryboard(name: "Main", bundle:nil)

    let viewController = storyBoard.instantiateViewController(withIdentifier: "login") as! login
    let appDelegate = UIApplication.shared.delegate as! AppDelegate
    appDelegate.window?.rootViewController = viewController 

【讨论】:

    猜你喜欢
    • 2011-12-19
    • 1970-01-01
    • 1970-01-01
    • 2020-08-14
    • 2023-03-09
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-10-12
    相关资源
    最近更新 更多