Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/swift/19.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Swift 在UINavigationController中嵌入的AlView控制器中设置_Swift_Uiviewcontroller_Uinavigationcontroller - Fatal编程技术网

Swift 在UINavigationController中嵌入的AlView控制器中设置

Swift 在UINavigationController中嵌入的AlView控制器中设置,swift,uiviewcontroller,uinavigationcontroller,Swift,Uiviewcontroller,Uinavigationcontroller,我在UINavigationController中嵌入了几个视图控制器。第一个视图控制器是登录页面。第二个视图控制器是主页。当用户已登录时,我希望initialview控制器作为第二个视图控制器 func application(_ application: UIApplication, didFinishLaunchingWithOptions launchOptions: [UIApplicationLaunchOptionsKey: Any]?) -> Bool { //

我在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
}
问题是后续视图控制器未嵌入到导航控制器中。因为它没有嵌入到导航控制器中,所以我无法从一个视图控制器返回到另一个视图控制器


添加此应用程序内代理

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

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

添加此应用程序内委托

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

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

使用此应用程序内委托并添加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设置故事板ID。

使用此应用程序内委托并添加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设置故事板ID。

这段代码帮我解决了问题

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
    }

这段代码帮了我的忙

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
    }

这种方法的问题是导航控制器在第二视图控制器中变为零。我使用这个导航控制器在我的控制器中设置了一些东西。@PrabuRaj我可以看到你的故事板屏幕快照我已经添加了屏幕快照请检查这个答案这种方法的问题是导航控制器在第二个视图控制器中变为零。我使用此导航控制器在我的控制器中设置了一些内容。@PrabuRaj我可以看到您的故事板屏幕快照我已添加了屏幕快照请检查此答案您是否在HomePageViewController控制器的故事板中指定了故事板标识符您是否在故事板中指定了id您是否可以尝试一次“UIStoryboard”(名称:“Main”,bundle:bundle.Main)'我修复了黑色视图问题。问题是导航控制器在secondView控制器中仍然为零。@AdityaGreat..您是否将导航控制器单独嵌入到second VC中。您是否在HomePageViewController控制器的序列图像板中指定序列图像板标识符Yeah我在序列图像板中指定id您能尝试吗他曾经的“UIStoryboard(name:“Main”,bundle:bundle.Main)”修复了黑色视图问题。问题是导航控制器在second view控制器中仍然为零。@AdityaGreat..您是否将导航控制器单独嵌入到second VC中。