2017-12-29 29 views
0

나는 네비게이션 스택에있는 뷰 컨트롤러 A를 가지고있다. 사용자가 CI에있는 버튼을 어떻게 B와 C를 모두 해제 할 수 A. 로 돌아갑니다 C와 B를 모두 기각 할 닿으면 모달 차례로 수 모달 다른 컨트롤러 C.한 번에 두 개의 모달보기 컨트롤러를 닫는 방법?

을 제시 다른 컨트롤러 B를 제공합니다 한 번에?

아래 코드는 작동하지만 안전합니까?

let p = self.presentingViewController 
    self.dismiss(animated: true) { 
     p?.dismiss(animated: true, completion: nil) 
    } 
+0

스토리 보드를 사용하는 경우 'unwind segue'를 사용하는 것이 좋습니다. 여기에서 예를 들어 https://cocoacasts.com/how-do-unwind-segues-work/를 살펴보십시오. – kiwisip

+0

@kiwisip 좋은 제안이지만 유감스럽게도 B와 C는 A와는 다른 여러 컨트롤러에서 제공 될 수 있으므로 몇 가지 긴장을 풀 필요가있을 것입니다. C는 B가 원래 제시된 위치에서 알 필요가 있습니다. 좀 지저분해질 수 있습니다. 그래서 나는 C가 스스로 할 수있는 것을 찾고있다. (B가 해고에 관여해야한다면 C와 B도). – Gruntcakes

+1

presentingViewController를 직접 닫을 수 있습니다. 제시된 모든 ViewController를 닫아야합니다. –

답변

0

최상위 뷰 컨트롤러를 속성으로 설정하십시오. BC의 맨 위보기 컨트롤러를 설정하는지 확인하십시오.

class C: UIViewController { 

    var topmostViewController: UIViewController? 

    @IBAction func dismiss(_ sender: Any) { 
     // If topmostViewController was not set, then assume 
     // the presenting view controller is to be dismissed. 
     (topmostViewController ?? presentingViewController)?.dismiss(animated: true) 
    } 

} 

이렇게하면 어느보기 컨트롤러가 해제되는지에 대한 유연성이 뛰어납니다.