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