2011-05-09 1 views
3

다른 modalviewcontroller의 modalviewcontroller를 보여 드리고 있습니다. 두 번째 modalviewcontroller를 닫을 때 첫 번째 및 두 번째 modalviewcontroller가 해제되어야합니다.다른 modalviewcontroller의 modalviewcontroller를 닫습니다.

[self.view.superview dismissmodalviewcontroller]; 

과 같은 첫 번째 모달보기에 액세스하려고 시도했지만 오류가 표시됩니다. 두 번째 메소드에서 첫 번째 modalViewController에 대한 참조를 가져오고 그 메소드에서 dismiss 메소드를 호출하는 올바른 방법은 무엇입니까?

+0

나는 당신에 유래 올바르게 포맷하는 방법을 배워야한다고 생각 이미 25 개 질문을 한 후. 읽고 쓰기가 더 쉽도록 질문의 형식을 정하면 사람들은 읽고 대답하기를 더 좋아합니다. – DarkDust

+0

질문을 쓸 때 마우스를 사용하여 전체 코드 부분을 선택하고 상단의 '{}'버튼을 클릭하십시오. 코드 형식을 지정하는 방법입니다 .. – Krishnabhadra

+0

앞으로도 계속 감사 할 것입니다 ... btw 나는 여전히 붙어 있습니다. 거기 pls 도움. – sujith1406

답변

10

그 것처럼.

A는 여기 B. 선물, A가 B의 상위 (여기서이 A.modalViewController가 B되며 B.parentViewController 될 의지)

및 B는 여기 C.를 제공하고, B는 여기에서 C의 부모 (인 , B.modalViewController는 C이고 C.parentViewController는 B가됩니다.

Apple 가이드 라인에 따르면 부모 컨트롤러가 자식 컨트롤러를 닫아야합니다.

컨트롤러 C를 닫으려면 C.parentViewController에서 dismissModalViewController를 호출하십시오. C의 부모는 B이므로, B는 자신이 제시 한 모달 (자식) 컨트롤러를 기각합니다.

하지만 B를 해고하기를 원합니다. B. 부모를 B가 해고 할 책임이 있습니다. 따라서 [B.parentViewController dismissModalViewControllerAnimated : YES];라고 말해야합니다.

따라서 C에서 B를 C.parentViewController로 가져와야합니다 (여기서 유형 변환하는 것을 잊지 마십시오). 그럼 당신은 그 말 : [B.parentViewController dismissModalViewControllerAnimated : YES];

+0

고마워 ... 내 하루를 구했다 !! – sujith1406

2

는 모두 모달 뷰 컨트롤러

+0

나는이 방법을 시도했다. 그러나 이것은 작동하지 않는 것 같다. 이것은 views의 계층이다. tableviewcontroller-> modalviewcontroller-> modalviewcontroller – sujith1406

2

dismissModalViewControllerAnimated: 방법은 UIViewController 클래스의 일부가 아닌 UIView의 인을 기각한다 [self.parentViewController dismissModalViewControllerAnimated:YES];

이보십시오. 그래서 당신은 self.view.superview에 그것을 호출하는 대신

[self.parentViewController dismissModalViewControllerAnimated:YES]; 

할 필요가있다.

+0

이렇게하면 되겠지만, 한 번만보기가 해제된다. 첫 번째 모달보기 가지 않을거야. 다른 방법이 있니? – sujith1406

+0

@ sujith1406 :'[self dismissModelViewControllerAnimated : YES];가 이미 있어야합니다. 대신에 [self.parentViewController dismissModalViewControllerAnimated : YES];로 바꾸어보십시오. 링크 된 문서에서 : * 여러 모달 뷰 컨트롤러를 연속해서 제시하고 모달 뷰 컨트롤러 스택을 빌드하는 경우 스택의 아래쪽에있는 뷰 컨트롤러에서이 메서드를 호출하면 해당 자식 뷰 컨트롤러와 해당 자식 위의 모든 뷰 컨트롤러가 닫힙니다 스택에 *. – DarkDust

+0

다시 문제가 생겨서 미안해. 내가 처음 대답을 바꿀 때 대답이 나왔다. [self dismissModelViewControllerAnimated : YES]; 와 함께 [self.parentViewController dismissModelViewControllerAnimated : YES]; 두 경우 모두 두 번째 모달보기가 해제됩니다. – sujith1406

2

는 당신이 필요 아마 것은이 같은 것입니다, 더욱 명확히하기 위해 : 난 그냥 우리가 한 줄의 코드를 필요로 누군가 도움이 될 것, 할 수 대답 발견

[self.parentViewController.parentViewController dismissModalViewControllerAnimated:YES]; 
1

[self.presentingViewController.presentingViewController dismissModalViewControllerAnimated:YES]; 
0

슬프게도보기가 항상 스택의 첫 번째 모달로 가볍게 튀긴 다음 애니메이션을 수행합니다.

나는 사용자 지정 애니메이션으로 고정 :

 let transition: CATransition = CATransition() 
     transition.duration = 0.5 
     transition.timingFunction = CAMediaTimingFunction(name: kCAMediaTimingFunctionEaseInEaseOut) 
     transition.type = kCATransitionReveal 
     transition.subtype = kCATransitionFromBottom 
     self.view.window!.layer.add(transition, forKey: nil) 
     self.presentingViewController?.presentingViewController?.dismiss(animated: false, completion: nil)