2017-07-05 12 views
1

私は、アプリケーションプログラミングでルートビューコントローラを変更する必要があることを知りたいと思います。下記の私は、このナビゲーションコントローラのサブクラスで値を取得できるように、ユーザがログアウトしたときに、私は私ができることに基づいて、として、ユーザーがログイン時に真と偽isLoggedInキーの値を設定しています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 
    } 

    } 
} 

私のコードですルートビューコントローラを選択します。しかし、それは正常に動作していない私はすでにログインしているだけで、私もログインページを取得しているアプリケーションを起動しているときに同じ残っている、またdidfinishlaunchingwithoptionsメソッドの内部にルートビューコントローラを変更するように私を示唆しないでください。誰かが私にそれを解決するのに役立つかもしれない?前もって感謝します。

+0

これは端末で確認しましたか? –

+0

SimulatorがUserDefaultsのために正しく動作していない –

+1

ストーリーボードから2つのセグを設定し、状況に応じてコードから1つを実行してみます。 – Roran

答えて

0

私が正しくあなたのコードの目標を理解していれば、あなたはすでにユーザがログインしている場合WelcomeViewController上で直接起動するように設定できます。

あなたはReplaceSegueというカスタムセグエを作成しようとする可能性があり、およびセットがこのReplaceSegueを設定しますNavigationViewControllerとViewControllerをリンクする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]、アニメーション:true)のようにする必要があります "セグを使用する必要はありません私の上記の行とうまく動作します。 –

+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

"dofinishlaunchingwithoptionsメソッドの中でルートビューコントローラを変更するように私に提案しないでください" x) –

+0

あなたの要件を最初にクリアしてください。 –

+0

実際、@Desdenovaはこの要件を十分に明確にしていませんでした。 –

関連する問題