web-dev-qa-db-ja.com

Swiftの最初のView Controllerに戻るにはどうすればよいですか?

ログインビューがあります。ログインに成功すると、Navigation Controllerの最初のビューに移動し、ユーザーは設定ビュー、ログアウトビューの順に移動できます。このログアウトにより、ユーザーはログインビュー(Navigation Controllerの一部ではありません)に戻ります。このコードで動作します:

let loginViewController = self.storyboard!.instantiateViewControllerWithIdentifier("Login") as? LoginViewController
self.navigationController!.pushViewController(loginViewController!, animated: true)

ただし、ログインビューの上部にはナビゲーションバーが表示されますが、これはすべきではありません。self.navigationController!.pushViewController私は使用すべきですか?

35
matt

Swift:巻き戻しセグエを使用する必要があります。

  1. まず、FirstViewControllerに次の行を追加します。

     @ IBAction func prepareForUnwind(segue:UIStoryboardSegue){
     
    } 
    

    この関数には、実際にはコードが含まれていません。


  1. 次に、ストーリーボードに移動し、黄色のボタンから[終了]ボタンにドラッグして、LogoutViewControllerのアンワインドセグエを作成します。このような:

control-dragging in action

  1. FirstViewController用に作成されたアンワインドセグエを選択します。

  2. セグエ識別子を変更します。

selected segue


changing the identifier of the segue

  1. LogoutViewControllerのコードに移動し、通常どおりアンワインドセグエを呼び出します。

     self.performSegueWithIdentifier( "unwindToViewController1"、送信者:self)
    

    Swift 4

     self.performSegue(withIdentifier: "unwindToViewController1"、送信者:self)
    
77
Allan Scofield

ストーリーボードを使用している場合は、セグエニングをほどいてください。

コントローラにアンワインドオプションを作成するだけで、次の場所に移動できます。

@IBAction func unwindToMe(segue: UIStoryboardSegue){}

次に、ストーリーボードからセグエを作成します。

また、戻る必要がある場合は、作成した巻き戻しセグエ識別子を使用してperformSegueメソッドを呼び出すだけです。

コードからのみ実行したい場合は、次のように書くことができます。

let loginViewController = self.storyboard?.instantiateViewControllerWithIdentifier("Login")
UIApplication.sharedApplication().keyWindow?.rootViewController = loginViewController

この場合、アプリを初期状態に設定します。

27
Vasyl Khmil

Navigation Controllerを使用している場合は、コントローラーから次を使用します。

self.navigationController?.popToRootViewControllerAnimated(true)
25
Rene Ramirez

それを試してみてください

    self.view.window?.rootViewController?.dismissViewControllerAnimated(true, completion: nil)

これにより、アプリケーションフローの最初に戻ります。

Swift 4に更新(ありがとう@javaBeast)

    self.view.window?.rootViewController?.dismiss(animated: true, completion: nil) 
13
Fco Junior

そのようにViewControllerをプッシュするのではなく、あるViewControllerから別のViewControllerにセグエを作成することをお勧めします。

最初に、最初のViewControllerからログインしているViewControllerにCtrl +クリックする必要があります。次に、属性インスペクターで識別子を指定します。

そして、あなたがしなければならないのはこれだけです:

    self.performSegueWithIdentifier("yourIdentifier", sender: self)

さて、ナビゲーションバーについては、ログインビューからNavigation Controllerを削除し、それを最初のビューに関連付けることをお勧めします。ログインビューからナビゲーションバーが削除されます。

0
tmato
self.navigationController?.popToRootViewController(animated: true)

navigation Controllerの最初のコントローラに移動してからNavigation Controllerを閉じるのに最適なオプションです

0
Mr Zee