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

问题描述:

我有几个嵌入在UINavigationController中的视图控制器。第一个视图控制器是登录页面。第二个视图控制器是主页。我想initialview控制器作为第二视图控制器,当用户在已经登录。设置嵌入在UINavigationController中的Intialview控制器

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

+0

你在HomePageViewController控制器 – Aditya

+0

故事板分镜指定标识是啊,我指定在故事板 –

+0

的ID,你可以试试这个曾经“UIStoryboard(名称:‘主’,捆绑:Bundle.main)” – Aditya

在应用程序委托添加此

首先检查用户已经登录与否,如果登录然后执行该代码

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 
+0

这种方法的问题是导航控制器在第二个视图控制器中变为零。我使用这个导航控制器来设置我的控制器中的一些东西。 –

+0

@PrabuRaj我可以看到你的故事板屏幕截图 –

+0

我已添加屏幕截图 –

使用此在应用程序委托,并添加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设置StoryboardID。

+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 
    }