2012-07-20 2 views
3

원하는 최종 결과를 처리하는 VC 포함에 대해 비슷한 질문이 있지만 기본적인 질문을 위해이 가상 질문을 요청하고 있습니다. 봉쇄의 개념.UIViewController 포함 기본 - 두 개의 side-by-side ViewController를 통해 전체 화면 ViewController를 표시하는 방법

viewController B와 viewController C가있는 주 컨트롤러 컨테이너 (A)가 있습니다. ViewController B는 화면의 절반을 차지하고 C는 나머지 절반을 차지합니다.

VC B의 버튼을 누르면 다른보기 컨트롤러 (D)가 전체 화면을 차지하게됩니다.

"split"컨트롤러 B와 C를 표시하는 코드가 있지만 viewController D를 표시하는 방법을 알아야합니다.

내 질문 : 어떤 코드에서 viewController D를 표시하고 어디에서 호출해야합니까?

나는이 패턴과 관련된 질문을 찾고 몇 시간을 보냈다. VC A가 그것을 표시한다고 가정하고 있습니다 (그렇지 않으면 전체 화면을 채울 수 없습니다). VC B의 버튼에 VCView가 사용됩니다. 그러나 작동시키지 못했습니다. .

답변

0

재사용 가능한 이유로 뷰 컨트롤러 B와 C (및 D)는 컨테이너보기 컨트롤러와 독립적으로 작동해야합니다. 이렇게하면 컨테이너보기 컨트롤러의 내부 및 외부에서 사용할 수 있습니다.

대리인을 사용하여 원하는대로 할 수 있습니다. 보기 컨트롤러 B에서 대리자 속성을 만들고 컨테이너보기 컨트롤러 (보기 컨트롤러 A)를보기 컨트롤러 B의 위임자로 설정합니다. 버튼을 누르면 대리인 ([self.delegate buttonPressed])에게 메시지가 전송되고 B가 수신합니다. 이제 B는 다른 자식보기 컨트롤러 (D)를 추가 할 수 있으며 원하는 방식으로 표시 할 수 있습니다.

parentViewController를 사용하면 효과가있을 수 있지만 독자적으로 해당보기 컨트롤러를 사용하기로 결정한 경우이 속성은 nil 일 수 있습니다.

0

컨트롤러 B는 에서 -presentViewController:animated:completion:으로 전화해야합니다. 이 메서드는 메시지를받은 컨트롤러부터 YES-definesPresentationContext에서 반환하는 계층 구조의 첫 번째 뷰 컨트롤을 모달로 표시합니다. 제어기의보기가 A 제어기와 관련하여 전체 화면이되도록하려면 해당 메소드를 대체하고 YES을 리턴하십시오. UIViewController documentation에서

는 :

@property(nonatomic, assign) BOOL definesPresentationContext

뷰 컨트롤러가 제공되면, 아이폰 OS는 제시 뷰 컨트롤러로 시작하고 프레젠테이션을 컨텍스트를 제공하고자하는 경우를 묻습니다. 프리젠 테이션 뷰 컨트롤러가 컨텍스트를 제공하지 않으면, iOS는 프리젠 테이션 뷰 컨트롤러의 상위 뷰 컨트롤러에 요청합니다. iOS는보기 컨트롤러가 프리젠 테이션 컨텍스트를 제공 할 때까지 뷰 컨트롤러 계층 구조를 검색합니다. 컨텍스트를 제공하는 뷰 컨트롤러 이없는 경우, 창 루트 뷰 컨트롤러 은 프레젠테이션 컨텍스트를 제공합니다.

보기 컨트롤러가 예를 반환하면 프레젠테이션 컨텍스트를 제공합니다.보기 컨트롤러의 보기로 덮여있는 창의 부분은 제공된보기 컨트롤러보기의 크기를 결정합니다. 이 속성의 기본값은 NO입니다.

관련 문제