2014-04-10 7 views
1

3 개의 viewController - BaseViewController-> AviewController-> BviewController가 있습니다.dismissViewControllerAnimated : 완료 : 개념?

AviewController는 BaseViewController에서 모달로 표시되고 BviewController는 AviewController에서 모달로 표시됩니다.

[self dismissViewControllerAnimated:Completion]을 호출하면 AviewController와 BviewController를 모두 닫습니다.

[self.presentingViewController dismissViewControllerAnimated:completion]을 호출하면 BviewController에서만 BviewController가 해제됩니다. AviewController가 해제되지 않는 이유는 무엇입니까?

이 개념이 잘못 되었습니까? AviewController = BviewController.presentingViewController입니다. ?

나는 또한 BviewController에서 AviewController의 약한 참조를 시도하고 닫으려고했습니다. 그러나 여전히 BviewController만이 기각됩니다. 즉, [AviewControllerReference dismissViewControllerAnimated:completion]

개념을 이해하는 데 실수가 있습니까? 사과 문서에서

답변

5

:

내원 뷰 컨트롤러는 제시된보기 컨트롤러를 기각 할 책임이있다. 제공된 뷰 컨트롤러에서이 메서드를 호출하면 보기 컨트롤러을 나타내는 메시지가 자동으로 전달됩니다.

따라서 제시된 컨트롤러를 닫으려면 VC 제시시이 메소드를 호출해야합니다. 그것을 제시하지 컨트롤러 자체. 위의 굵게 표시된 테스트에서 볼 수 있듯이, 제시된 VC에서이 함수를 호출하면 메서드를 자동으로 VC에 전달합니다.

그래서 BViewController에 행 아래

전화가 AViewcontrollerBViewController 모두 해제하여 문제에 응답합니다. ,

[self.presentingViewController.presentingViewController dismissViewControllerAnimated:YES completion:nil]; 

은 Equalent은 BaseViewControllerdismissViewController:를 호출하는 것입니다. 어떤 올바른 해산 방법입니다 AViewController

+1

[self.presentingViewController dismissViewControllerAnimated : 완료]는 BviewController에서 어떻게됩니까? 왜이 Aviewcontroller를 해고하지 않는가? – AUK4SO

+0

답변을 확인하고 수정했습니다. – sleepwalkerfx