设置嵌入在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
}
问题是后续视图控制器不嵌入在导航控制器。由于它没有嵌入到导航控制器中,我无法从一个视图控制器转移到另一个视图控制器。
在应用程序委托添加此
首先检查用户已经登录与否,如果登录然后执行该代码
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
这种方法的问题是导航控制器在第二个视图控制器中变为零。我使用这个导航控制器来设置我的控制器中的一些东西。 –
@PrabuRaj我可以看到你的故事板屏幕截图 –
我已添加屏幕截图 –
使用此在应用程序委托,并添加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。
你能检查我的更新代码吗? –
此代码为我做了诡计。
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
}
你在HomePageViewController控制器 – Aditya
故事板分镜指定标识是啊,我指定在故事板 –
的ID,你可以试试这个曾经“UIStoryboard(名称:‘主’,捆绑:Bundle.main)” – Aditya