2016-07-31 1 views
1

私はスウィフトアプリケーションで次のユーザフローを作成したい:別のナビゲーションコントローラのビューにポップバックする方法は?

  1. ユーザーは、モーダルビューを選択してオーバーポップボタン
  2. をクリックします。ユーザーは選択肢を選択します。
  3. もう1つの選択肢が表示されます(「表示」遷移を使用)ので、ユーザーは<  を押すことができます。選択肢1を変更するにはを押します。ユーザは第2の選択肢を選択する。
  4. 2番目のモーダルビューは、元のビュー(ボタンを含む)に戻る。そして、すべての方法VC3に至るVC1への参照を渡す呼び出すことによって

    --> NC1 --> VC1 --modal-> NC2 --> VC2 --show-> VC3 (NC = UINavigationController, 
          ^        |  VC = UIViewController) 
          |         | 
          ----Segue I'm trying to achieve----- 
    

    私はVC1に戻ってすべての方法をポップしようとしました:

は、これを行うために、私は次の構造を作成しましたVC3の次のコード:

override func tableView(tableView: UITableView, didSelectRowAtIndexPath indexPath: NSIndexPath) { 
    // Perform Segue 
    print("Trying to segue") 
    rootController!.navigationController!.popToRootViewControllerAnimated(true) 

    tableView.deselectRowAtIndexPath(indexPath, animated: true) 
} 

ここで、rootControllerはVC1への参照です。残念ながら、セグは発生しません。 2番目のモーダルビューは画面上にとどまりますが、 "Trying to segue"というメッセージが表示されます。

私はこのユーザーフローを適切に実装しようとしていますか?もしそうなら、私は別のナビゲーションコントローラのルートビューにポップできないのですか?

+0

、あなたが –

答えて

3

ストーリーボードを使用している場合は、巻き戻しセグを使用してこれを行うことができます。 VC1で

パラメータとしてUIStoryboardSegueを取る@IBAction方法、実装します、VC3コントロールドラッグのプロトタイプ細胞からのビューコントローラの終了アイコンに続いて

@IBAction func unwindToVC1(sender: UIStoryboardSegue) { 

} 

Selection Segue: unwindToVC1:を選択して、あなたは良いです行く。

enter image description here

また、コードを使用して同様の結果を得ることができます。
このようVC3でdidSelectRowAtIndexPathを実装します。あなたのすべてのコントローラがナビゲートしている含まれていviewControllersというプロパティがあり、あなたのナビゲーションコントローラに

override func tableView(tableView: UITableView, didSelectRowAtIndexPath indexPath: NSIndexPath) { 
    navigationController!.dismissViewControllerAnimated(true, completion: nil) 
} 
+1

おかげヴィクトルをスキップしたいものを削除するには、私は 'dismissViewControllerAnimatedを使用しましたあなたがVC3で示唆したように、それは仕事をしました。 –

関連する問題