设置嵌入在UINavigationController中的Intialview控制器

时间:2017-09-15 10:58:54

标签: swift uiviewcontroller uinavigationcontroller

我在UINavigationController中嵌入了很少的视图控制器。第一个视图控制器是登录页面。第二个视图控制器是主页。当用户已经登录时,我想将initialview控制器作为第二个视图控制器。

func application(_ application: UIApplication, didFinishLaunchingWithOptions launchOptions: [UIApplicationLaunchOptionsKey: Any]?) -> Bool 
{
    // Override point for customization after application launch.
    if let data = Locksmith.loadDataForUserAccount(userAccount: "someString")
    {
        if let userAccessToken = data["accessToken"]
        {
            if (userAccessToken as! String) != ""
            {
                let initialViewController = UIStoryboard(name: "Main", bundle: nil).instantiateViewController(withIdentifier: "HomePageViewController") as! HomePageViewController
                loginResponse =  LoginResponse()
                loginResponse?.UserAccessToken = userAccessToken as? String
                self.window = UIWindow(frame: UIScreen.main.bounds)
                self.window?.rootViewController =  initialViewController
                self.window?.makeKeyAndVisible()
            }
        }
    }
    return true
}

问题是后续的视图控制器没有嵌入导航控制器中。由于它没有嵌入导航控制器,我无法从一个视图控制器到另一个视图控制器。

enter image description here

3 个答案:

答案 0 :(得分:1)

在App委托

中添加此内容

首先检查用户是否已登录,如果登录则执行此代码

let mainStoryBoard = UIStoryboard(name: "Main", bundle: nil)
 let redViewController = mainStoryBoard.instantiateViewControllerWithIdentifier("respectiveIdentifier") as! ViewController
 let appDelegate = UIApplication.sharedApplication().delegate as! AppDelegate
 appDelegate.window?.rootViewController = redViewController

答案 1 :(得分:1)

在App Delegate中使用此功能并添加UIStoryboard的扩展名。

func checkForAlreadyLogin() {
    let dashBoardScreen = UIStoryboard.dashBoardScreen()
    let loginController = UIStoryboard.loginController()

    if UserDefaults.standard.bool(forKey: UserDefaultValues().LOGINSTATUS){
        self.window!.rootViewController = dashBoardScreen

    }else {
        self.window!.rootViewController = loginController
    }

}


public extension UIStoryboard {
   class func mainStoryboard() -> UIStoryboard { return UIStoryboard(name: "Main", bundle: Bundle.main) }

   class func dashBoardScreen() -> HomeViewController?{
       return mainStoryboard().instantiateViewController(withIdentifier: "HomeViewController") as? HomeViewController
   }

   internal class func loginController() -> LoginViewController?{
       return mainStoryboard().instantiateViewController(withIdentifier: "LoginViewController") as? LoginViewController
   }
}

只需在'didFinishLaunchingWithOptions'中调用此checkForAlreadyLogin()方法。

还记得在每个viewController的storyboard中设置StoryboardID。

答案 2 :(得分:0)

这段代码对我有用。

func application(_ application: UIApplication, didFinishLaunchingWithOptions launchOptions: [UIApplicationLaunchOptionsKey: Any]?) -> Bool {
        // Override point for customization after application launch.
        if let data = Locksmith.loadDataForUserAccount(userAccount: "someString")
        {
            if let userAccessToken = data["accessToken"]
            {
                if (userAccessToken as! String) != ""
                {
                    let initialViewController = UIStoryboard(name: "Main", bundle: Bundle.main).instantiateViewController(withIdentifier: "HomePageViewController") as! HomePageViewController
                    let navigationController = self.window?.rootViewController as! UINavigationController
                    navigationController.pushViewController(initialViewController, animated: true)
                }
            }
        }
        return true
    }