2016-11-30 2 views
1

네 개의 ViewController가 NavigationController에 연결되어 있습니다. 그들 순서는 1-> 2-> 3-> 4입니다. 사용자가 4에서 뒤로 버튼을 누르면 3 대신 2로 리다이렉트하고 싶습니다. 동시에, 뒤로 버튼을 눌러도 사용자가 2로 돌아가도록 할 수 있습니다. 3 . 이것이 가능한가? 미리 감사드립니다.Swift - NavigationController에서 viewcontroller를 제거하는 방법은 무엇입니까?

+0

긴급 풀림을 사용하십시오. 비슷한 대답이 많이 있습니다. 여기에 [하나] (http://stackoverflow.com/q/24029586/5099208) – Idan

+0

만약 당신이 신속한 대답을 원한다면이 하나 봐 http://stackoverflow.com/questions/31878108/ios-swift-poptoviewcontroller -by-name –

+0

unwigged segue 사용 http://stackoverflow.com/questions/12561735/what-are-unwind-segues-for-and-how-do-you-use-them – Cruz

답변

1

물론이 작업을 수행 할 수 있습니다. 4 번째 ViewController에서 왼쪽 바 버튼을 생성하기 만하면됩니다. 그 버튼 액션에 당신은 탐색 스택의 컨트롤러를 확인할 수 있습니다 제 2의 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

on 네 번째 viewcontroller viewDidload self.navigationItem.leftBarButtonItem = UIBarButtonItem (이미지 : 이미지, 스타일 : .Plain, target : self, action : #selector (self.back (_ :)) 및 액션 함수 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 
     } 
    } 
관련 문제