2011-12-08 2 views
12

tab 기반 응용 프로그램이 있습니다. 그것 안에 views 중 하나는 modal view controller을 밀고있다. modal view controller 내에서 self.presentingViewController을 호출하면 view controller이 아닌 tab bar controller이 반환됩니다.self.presentingViewController는 UITabBarController를 반환하지 않습니다.보기 컨트롤러가 presentModalViewController로 밀어 넣습니다.

무엇이 여기에 있습니까? 모달을 올리는 view controller을 돌려 줄 수있는 확실한 방법이 있습니까?

감사합니다.

애플의 문서에서
+0

답변을 찾았습니까? – dimirc

+0

대답은 parentViewController 일 수 있다고 생각했는데, 적어도 iOS 8에서는 작동하지만 7에서는 작동하지 않는 것으로 나타났습니다. –

답변

3

:

이 속성의 기본 구현은이 뷰 컨트롤러에서 시작,보기 계층을 안내합니다. 첫 번째보기 컨트롤러는 presentViewController : animated : completion : 메서드를 수신했거나 definedPresentationContext 속성을 YES로 설정 한 것을 찾은 경우 속성의 값으로 반환됩니다. 이 반환 할 값을 찾거나 루트보기 컨트롤러에 도달 할 때까지 계속 계층 구조를 따라갑니다.

그래서 다른보기 컨트롤러가 밀어 넣었음에도 불구하고보기 컨트롤러의보기는 모달보기로 덮여 있습니다. 뷰가 보이지 않거나 definesPresentationContext이 YES로 설정된보기 컨트롤러를 찾거나 사용자의 경우 Tab Bar Controller 인 루트보기 컨트롤러에 도달 할 때까지 계층을 따라갑니다.

나는 제시 컨트롤러가 definesPresentationContext을 YES로 설정하여 모달을 표시 한보기 컨트롤러를 반환하는 방법에 대한 질문에 대답해야한다고 말합니다.

+1

올바른 방향으로 주셔서 감사드립니다. 그러나'definesPresentationContext'는 아무런 차이가 없습니다. UITabBar는 여전히 응답 중입니다. 왜냐하면'presentViewController : animated : completion :'을 받기 때문입니다. 뷰 대리인을 앱 대리자로 등록하고이를 참조하는 방법에 의존해야했습니다. – nekiTamoTip

12

iPhone 응용 프로그램입니까? 그렇다면 혼란을 설명합니다. iPhone에서 유일한 프리젠 테이션 스타일은 UIModalPresentationFullScreen입니다. 이는 iPhone에서 이라고 말하면서 루트보기 컨트롤러는 항상 프리 뷰 컨트롤러입니다. UITabBarController의 뷰는 탭 표시 줄 인터페이스에서 루트 뷰 컨트롤러입니다.

iPhone에서 모달보기는보기 컨트롤러의보기를 대체하지 않습니다. 전체 인터페이스을 바꿉니다. 즉, 탭 표시 줄 컨트롤러의보기를 대체합니다. 탭 표시 줄 컨트롤러가 실제로 제시 컨트롤러입니다.

저는 iPhone에서 실제로는 presentViewController: 또는 presentModalViewController:을 탭 표시 줄 컨트롤러에 포함 된보기 컨트롤러에 보내지 않아야한다고 생각합니다. 탭바 컨트롤러로 보내야합니다. 따라서 메시지는 탭 표시 줄 컨트롤러로 라우팅됩니다.

iPad를 사용하는 경우가 아니면 presentingViewController의 값은 재미 있지 않습니다. iPad에서는 으로 만들면 모달 뷰가 뷰 컨트롤러의 뷰를 대체하게됩니다. 이렇게하려면 모달 뷰의 modalPresentationStyleUIModalPresentationCurrentContext이어야합니다. 그리고이 경우 해당 presentingViewController 일 수 있습니다. 실제로는 "모달 뷰 컨트롤러를 푸시합니다."라는 견해입니다.

관련 문제