2016-11-30 19 views
1

NavControllerに4つのViewControllerが接続されています。それらの順序は1-> 2-> 3-> 4です。ユーザーが4で戻るボタンを押すと、3の代わりに2にリダイレクトされるようにします。同時に、戻るボタンを押したときに2に戻るようにしたいと思いますこれは可能ですか?前もって感謝します。Swift - NavigationControllerからViewControllerを削除するにはどうすればいいですか?

+0

アンワインドセグを使用すると、多くの同様の回答があります。ここには[ワン](http://stackoverflow.com/q/24029586/5099208) – Idan

+0

あなたは迅速な答えをしたい場合は、これを見てくださいhttp://stackoverflow.com/questions/31878108/ios-swift-poptoviewcontroller -by-name –

+0

未処理のセグを使用します。http://stackoverflow.com/questions/12561735/what-are-unwind-segues-for-and-how-do-you-use-them – Cruz

答えて

1

もちろんこれを行うことができます。 4番目のViewControllerで左のバーボタンを作成するだけです。そのボタンアクションにあなたがナビゲーションスタックのコントローラをチェックすることができる第二のViewController

 if let viewcontroller = self.navigationController?.viewControllers[1] where viewcontroller.isKindOfClass(YourController) { 
     self.navigationController?.popToViewController(viewcontroller, animated: false)   } 
+0

Swift3の小さな変更点:viewcontroller = self.navigationController?.viewController [1]、viewcontrollerはYourViewControllerです。 let _ = self.navigationController?.popToViewController(viewcontroller、animated:false)} –

+0

ありがとうございました!出来た。私は絶対初心者だからもう一つの質問:これをバックボタンにどのように割り当てるのですか?私はUIBarButtonSystemItemsのリストを調べましたが、利用可能な戻るボタンはないようです。 – qunayu

+0

第4ビューコントロールのviewDidload self.navigationItem.leftBarButtonItem = UIBarButtonItem(image:image、style:.Plain、target:self、action:#セレクタ(self.back(_ :)) アクションfunc backButtonAction(送信者:AnyObject) ){ if viewcontroller = self.navigationController?.viewControllers [1]ここで、viewcontroller.isKindOfClass(YourController){ self.navigationController?.popToViewController(viewcontroller、animated:false)} } – Sahil

0
if let vc = self.viewControllerWithClass(YourVC.self) { 

        self.popToViewController(vc, animated: true) 
} 


extension UINavigationController { 

    func viewControllerWithClass(_ aClass: AnyClass) -> UIViewController? { 

     for vc in self.viewControllers { 

      if vc.isMember(of: aClass) { 

       return vc 
      } 
     } 

     return nil 
    } 
} 
0

にポップ。

let controllers = navigationController!.viewControllers.reverse() 
    for controller in controllers 
    { 
     if controller.isKindOfClass(YourController) 
     { 
      self.navigationController?.popToViewController(controller, animated: true) 
      return 
     } 
    } 
関連する問題