2017-07-05 51 views
1

我想知道我需要在應用程序編程中更改根視圖控制器。下面是我的代碼如何維護ios中的登錄會話?

class NavigationViewController: UINavigationController { 

var window: UIWindow? 

override func viewDidLoad() { 
    super.viewDidLoad() 

    let storyBoard = UIStoryboard(name: "Main", bundle: nil) 
    let newRootView = storyBoard.instantiateViewController(withIdentifier: "WelcomeViewController") as! WelcomeViewController 
    let userStatus = UserDefaults.standard.bool(forKey: "isLoggedIn") 
    if userStatus { 
     self.window?.rootViewController = newRootView 
    } 

    } 
} 

我設置isLoggedIn鍵爲真,當用戶登錄和錯誤值,當用戶註銷,這樣我可以檢索該導航控制器的子類值的基礎上,我可以選擇根視圖控制器。但它不能正常工作,它仍然保持不變,只要我啓動應用程序我只接收登錄頁面,但我已經登錄,也請不要建議我改變didfinishlaunchingwithoptions方法中的根視圖控制器。有人能幫我解決嗎?提前致謝。

+0

您是否在設備上檢查過該設備? –

+0

模擬器無法正常工作UserDefaults –

+1

嘗試從故事板中設置兩個segues,然後根據具體情況從代碼中執行其中的一個。 – Roran

回答

0

如果我理解你的代碼的正確的目標,你想,如果用戶已經登錄到WelcomeViewController直接啓動。

你可以嘗試創建一個名爲ReplaceSegue和一個自定義賽格瑞和組設置此ReplaceSegue到鏈接NavigationViewController和ViewController的segue。

然後你可以改變你的segue的目的地。

class ReplaceSegue: UIStoryboardSegue { 

    override func perform() { 
     let storyBoard = UIStoryboard(name: "Main", bundle: nil) 
     let newRootView = storyBoard.instantiateViewController(withIdentifier: "WelcomeViewController") as! WelcomeViewController 
     sourceViewController.navigationController?.setViewControllers([newRootView], animated: true) 
    } 
} 
+0

謝謝!是的,我需要設置視圖控制器,不應該像「self.window?.rootViewController = newRootView 」,我應該這樣做「self.setViewControllers([newRootView],animated:true) 」不需要使用segues它與我上面提到的線路一起工作正常。 –

+0

在我介紹的解決方案中,您必須重寫將您的UINavigationViewController與LoginViewController鏈接起來的rootView Segue並複製粘貼我的代碼。 –

-1

首先在NSUserDefults中設置用戶登錄bool true。當用戶登錄成功時。

UserDefaults.standard.set(true, forKey: "USERISLOGIN") 

現在打開Appdelegate.swift - > didFinishLaunchingWithOptions方法: -

func application(_ application: UIApplication, didFinishLaunchingWithOptions launchOptions: [UIApplicationLaunchOptionsKey: Any]?) -> Bool { 

    if(UserDefaults.standard.bool(forKey: "USERISLOGIN")){ 

       let storyboard = UIStoryboard(name: "Main", bundle: nil) 

       let objLogoutVC = storyboard.instantiateViewController(withIdentifier: "LogoutVC") as! LogoutVC 
       let navigationController = UINavigationController(rootViewController: objLogoutVC) 

       navigationController.navigationBar.isTranslucent = false 
       navigationController.navigationBar.isHidden = true 
       self.window?.rootViewController = navigationController 
       self.window?.makeKeyAndVisible() 
      } 
    return true 
} 

讓我知道如果你需要任何東西更多。

+0

「請不要建議我在didfinishlaunchingwithoptions方法內部更改根視圖控制器」x) –

+0

首先清除您的需求。 –

+0

的確,@Desdenova並沒有把這個要求弄清楚。 –