【问题标题】:Setting Intialview controller embedded in UINavigationController设置嵌入在 UINavigationController 中的 Intialview 控制器
【发布时间】:2017-09-15 10:58:54
【问题描述】:

我在 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
}

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

【问题讨论】:

  • 您是否在 HomePageViewController 控制器的 Storyboard 中指定了 Storyboard 标识符
  • 是的,我在情节提要中指定了 id
  • 你能试试这个吗'UIStoryboard(name: "Main", bundle: Bundle.main)'
  • 我修复了黑屏问题。问题是第二个视图控制器中的导航控制器仍然为零。@Aditya
  • 太棒了..您是否将导航控制器单独嵌入到第二个 VC。

标签: swift uiviewcontroller uinavigationcontroller


【解决方案1】:

在应用委托中添加这个

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

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

【讨论】:

  • 这种方法的问题是导航控制器在第二个视图控制器中变为 nil。我使用这个导航控制器在我的控制器中设置一些东西。
  • @PrabuRaj 我可以看到你的故事板屏幕截图
  • 我已经添加了截图
【解决方案2】:

在 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 设置 StoryboardID。

【讨论】:

    【解决方案3】:

    这段代码对我有用。

    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
        }
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2016-08-22
      • 1970-01-01
      • 2012-04-29
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多