2013-03-04 4 views
1

UISplitViewController를 사용하는 앱이 있습니다. 가로 방향 인 경우 항상 마스터보기를 항상 표시하고 때로는 세로 방향과 같이 자동 숨기기를 원할 때가 있습니다. 현재이 설정은 앱에서 조정할 수 있습니다.프로그래밍 방식으로 UISplitViewController에서 마스터보기를 표시/숨기기

한 가지를 제외하고는 모두 잘 작동합니다. 설정을 변경하면 다음 번에 기기를 회전 할 때 (즉, splitViewController : shouldHideViewController : inOrientation :이 호출 될 때)가 아니라 자동 숨기기 설정이 즉시 적용됩니다.

SVIS가 splitViewController를 쿼리 할 수 ​​있도록 UISplitViewController를 강제로 열거 나 숨기는 방법이 있습니까? shouldHideViewController : inOrientation : method?

도움을 주시면 감사하겠습니다.

답변

3

직접적인 방법은 없습니다.

기능적이지만 조금 해킹 된 솔루션은 대리인을 설정하고 마스터를 표시/숨길 때 대리인에게 전달 된 barButtonItem을 녹음하는 것입니다. 버튼을 사용하여 액션을 트리거 할 수 있습니다. 당신은 당신이 원하는 것을 달성하기 위해이 대상을 추가 할 수 있습니다, 기존의 버튼

- (void)splitViewController:(UISplitViewController *)svc willHideViewController:(UIViewController *)aViewController withBarButtonItem:(UIBarButtonItem *)barButtonItem forPopoverController:(UIPopoverController *)pc 
{ 
    _buttonItem = barButtonItem; 
    // ... 
} 

- (void)splitViewController:(UISplitViewController *)svc willShowViewController:(UIViewController *)aViewController invalidatingBarButtonItem:(UIBarButtonItem *)button 
{ 
    _buttonItem = nil; 
    // ... 
} 

- (void)toggleMasterVisible 
{ 
#pragma clang diagnostic push 
#pragma clang diagnostic ignored "-Warc-performSelector-leaks" 
    [_buttonItem.target performSelector:_buttonItem.action]; 
#pragma clang diagnostic pop 
} 
+0

아쉽게도 마스터보기가 처음에 표시되면 (예 : shouldHideViewController가 NO를 반환), 설정을 변경하면 UIBarButtonItem이 작동하지 않습니다. –

+0

오, 알았어요. 나는 그때 주인을 제거 할 수있는 방법이 없다. –

+0

@NikolaiRuheReason, @George Sealy 그 이유는 'shouldHideViewController'가'NO '를 반환하면 마스터와 디테일이 서로 옆에 (세로 방향 인 경우에도) 표시되고 마스터는 디테일 위에'오버레이 '로 표시되지 않기 때문일 수 있습니다. 즉, 분할보기의 일부이기 때문에 전체 상세보기 컨트롤러를 표시하기 위해 '스 와이프'할 수 없습니다. – anneblue

0

: 내가 말한하지만, 이것은 그 일을 (그리고 미래에 중단 될 수 있습니다)의 좋은 방법이 정말없는

나는 가정해야
[button addTarget: theSplitViewController action: @selector(toggleMasterVisible:) forControlEvents:UIControlEventTouchUpInside]; 

는 방금

[theSplitViewController toggleMasterVisible: nil]; 

이것은 완전히 문서화되지 않은 호출 할 수 있습니다 의미하지만, 그것은 당신이 willHideViewController 함수에서 얻을 barButtonItem와 동일하게 작동합니다.

+0

은 ios 6에서 사용 가능하며 사과가 문서화되지 않은 기능을 승인합니까? –

관련 문제