【问题标题】:AddingViewcontroller manually into the stack swift 3将Viewcontroller手动添加到堆栈中swift 3
【发布时间】:2017-12-17 21:14:21
【问题描述】:

我正在编写我的应用程序中的退出按钮。这是我的应用程序的流程。

  1. SplashvwController -> secretCodeViewController -> LoginviewController -> DashboardViewController

在这个DashboardViewController我有signOut按钮。

用户登录后,我的应用程序具有单点登录功能,下次他打开应用程序时,

  1. SplashvwController -> DashboardViewController

我想在用户点击退出按钮时提示他Loginviewcontroller

问题

当用户通过路径 1 时,我可以简单地执行 popviewcontroller 以返回到之前的视图控制器。但是当用户通过第二条路径时,

  • 如何手动将Loginviewcontroller 添加到我的 viewcontrollers 堆栈来执行相同的操作?
  • 如何检查 LoginviewController 是否存在于我当前的 Viewcontrollers 堆栈中?

请帮帮我

【问题讨论】:

    标签: ios swift3 uiviewcontroller uinavigationcontroller


    【解决方案1】:

    我认为,下面的代码可以帮助你,

     for (var i = 0; i < self.navigationController?.viewControllers.count; i++) {
                            if(self.navigationController?.viewControllers[i].isKindOfClass(Loginviewcontroller) == true) {
    
                                self.navigationController?.popToViewController(self.navigationController!.viewControllers[i], animated: true)
    
                                break;
                            }
                        }
    

    要手动添加 ViewController,请检查下面的代码..

         let navigation = mainStoryboard.instantiateViewController(withIdentifier: "LoginViewController") as! LoginViewController 
        let nav = UINavigationController(rootViewController: navigation) 
    appdelegate.window!.rootViewController = nav
    

    【讨论】:

    • 在注销按钮动作中,可以添加这个let navigation = mainStoryboard.instantiateViewController(withIdentifier: "LoginViewController") as! LoginViewController let nav = UINavigationController(rootViewController: navigation) appdelegate.window!.rootViewController = nav
    • 并在全球范围内声明let appdelegate = UIApplication.shared.delegate as! AppDelegatelet mainStoryboard: UIStoryboard = UIStoryboard(name: "Main", bundle: nil)
    【解决方案2】:

    Main.Storyboard 文件上的LoginViewController 设置故事板引用identifier

    只要你想显示LoginViewController,只需调用函数

      func launchLoginView() {
            if let loginVC: LoginViewController = UIStoryboard(name: "Main", bundle: nil).instantiateViewControllerWithIdentifier("LoginStoryboardID") as? LoginViewController {
    
            // .instantiatViewControllerWithIdentifier() returns AnyObject! this must be downcast to utilize it
           // LoginStoryboardID is the reference id for login view controller.
    
    
                self.presentViewController(loginVC, animated: true, completion: nil). 
                // OR
                //UIApplication.shared.keyWindow?.rootViewController = loginVC
            }
        }
    

    基于用户登录状态的登陆屏幕。

    AppDelegte.swift

    class AppDelegate: UIResponder, UIApplicationDelegate {
    
        var window: UIWindow?
    
           func application(_ application: UIApplication, didFinishLaunchingWithOptions launchOptions: [UIApplicationLaunchOptionsKey: Any]?) -> Bool {
    
                let isLoggedAlready = //Get the login status
                 if isLoggedAlready == true {
                    if let dashBoardVC: DashboardViewController = UIStoryboard(name: "Main", bundle: nil).instantiateViewControllerWithIdentifier("DashboardStoryboardID") as? DashboardViewController {
                         //Already logged in then directly launch dashboard vc.
    
                        //change the code based on your needs
                          window?.rootViewController =  dasbBoardVC
    
                    }
                 } 
            // Otherwise let it go as flow 1
    
            return true
    
       } 
    }
    

    【讨论】:

    • 我可以将它添加为第二个视图控制器吗?不是根视图控制器?
    • 是的,你可以..检查登录状态并推送@user1960169
    • 不,我的意思是现在您已将其设置为根控制器,不是吗?所以我想在我的 splashViewcontroller 之后插入它。我的根视图控制器始终应该是 spaslviewcontroller。 (这不是默认的启动文件)
    • 好的。然后在 Splashview 控制器上添加逻辑状态检查。不要更改 window.rootViewController。在 Splashviewcontroller 中,在推送到密码视图控制器之前检查登录状态,如果已经登录,则不要进入密码视图,推送到仪表板视图
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-04-01
    • 2018-04-15
    • 1970-01-01
    • 2015-08-12
    相关资源
    最近更新 更多