2016-04-26 13 views
0

ナビゲーションビューコントローラでログインVCと呼ばれるビューコントローラが1つあります。LoginVc.Firstボタンの2つのボタンを押すと、signUp Screenに移動します。セカンドボタンは忘れ去られますパスワード画面をプッシュセグとして表示します。ナビゲーションコントローラでビューコントローラを呼び出す方法

私のアプリにログインして入力すると、ログアウトと呼ばれるボタン名が1つあります。ユーザーがログアウトボタンを押したときのようなコード機能を書いています。ログアウトする "。ユーザーが押すと再びログイン画面に移動します。

ユーザがログアウトした後、ログイン画面が表示され、ユーザが自分の2つのボタンを押すと[i。 eはパスワードを忘れたことを意味します。画面にサインアップします。]その後、クラッシュします。

クラッシュレポート:

Terminating app due to uncaught exception 'NSGenericException', reason: 'Push segues can only be used when the source controller is managed by an instance of UINavigationController.' 

は、ボタンのコードログアウトマイ:

let vc: UINavigationController = storyboard.instantiateViewControllerWithIdentifier("LoginViewController") as! UINavigationController 

しかし、どのようにすることができます私は同じproblem.Nowを取得しています:

@IBAction func LogoutButton(sender: AnyObject) { 

    NSUserDefaults.standardUserDefaults().setBool(false, forKey: "ISLOGGEDIN") 

    NSUserDefaults.standardUserDefaults().synchronize() 

    dispatch_async(dispatch_get_main_queue(), { 


     let alert = UIAlertController(title: "Logout Successful", message: "You have successfully logged out.", preferredStyle: UIAlertControllerStyle.Alert) 

     // add an action (button) 
     alert.addAction(UIAlertAction(title: "OK", style: UIAlertActionStyle.Default){action -> Void in 

      let loginViewController = self.storyboard?.instantiateViewControllerWithIdentifier("LoginViewController") as? LoginViewController 




      let appDelegate:AppDelegate = UIApplication.sharedApplication().delegate as! AppDelegate 

      appDelegate.window?.rootViewController = loginViewController 


      }) 

     // show the alert 
     self.presentViewController(alert, animated: true, completion: nil) 

    }) 




} 

を、私はこの行を追加してみてください私は自分のログアウトボタンアクションメソッドに自分のコードを書きます。ナビゲーションバーでログイン画面にリダイレクトする。

私を助けてください。ありがとう!

答えて

1

役立つ

希望。あなたのRootViewControllerはNavigationControllerでなければなりません。したがって、LoginViewControllerをNavigationViewControllerに追加し、そのwindowのrootViewControllerを設定します。

let loginViewController = self.storyboard?.instantiateViewControllerWithIdentifier("LoginViewController") as? LoginViewController 
let navigationController = UINavigationController(rootViewController: vc) 
window.rootViewController = navigationController 
1

あなたはこのように行わない理由:

self.navigationController?.pushViewController(loginViewController!, animated: true) 

、あなたが戻って来てほしいとき:

self.navigationController?.popViewControllerAnimated(true) 
+0

このチュートリアルを見てみましょう:http://code.tutsplus.com/tutorials/ios-from -scratch-with-swift-navigation-controllers-and-view-controller-hierarchy-cms-25462 –

+0

ログインしてナビゲーションコントローラをナビゲートするサンプルコードを投稿できますかscren – user5513630

+0

これは、上記の答えで、このロジックを理解するチュートリアルをチェックしています。 –

1

あなたのエラーによると、あなたのビュー階層に見つかりませナビゲーションコントローラがありません。

ストーリーボードからloginviewControllerを選択し、Editorembed inNavigation controllerから選択してください。 viewcontrollerを押すにはperformSegueを使用し、popViewControllerまたはpopTorootviewcontrollerを使用してナビゲーションコントローラに戻ります。これはあなたがのViewControllerにRootViewControllerを設定しているが、あなたのアプリケーションがNavigationViewControllerです:)

1
  1. ストーリーボード
  2. でのViewControllerをクリックし
  3. ゴーエディタへ - >埋め込むには - >ナビゲーションコントローラこれは、このビューコントローラのナビゲーションを追加します。
  4. 次に、あるビューコントローラから別のビューコントローラにプッシュしてポップすることができます。

例:プッシュ

var dash : XyzViewController = storyBoard.instantiateViewControllerWithIdentifier("xyz") as! XyzViewController 
self.navigationController?.pushViewController(dash, animated: true) 

ポップ

self.navigationController?.popViewControllerAnimated(true) 
関連する問題