UISplitViewController의 마스터 뷰 표시/숨기기 전환
4815 단어 iPad
UISplitViewController의 마스터 뷰 표시/숨기기를 버튼 탭이 아닌 프로그램에서 전환하는 방법에 관한 것입니다.
UISplitViewController 클래스는 -splitViewController:shouldHideViewController:inOrientation:대리자 메서드나 대리자 메서드에 전달된 UIBarButtonItem 객체를 사용하여 Master 뷰(왼쪽에 표시되는 뷰)를 표시/숨길 수 있습니다. 예를 들어 다음과 같이 델리게이트 메서드를 구현하는 경우 세로로 표시할 때 마스터 보기를 숨기고 전체 화면에서 세부 보기(오른쪽에 표시)를 표시할 수 있습니다.
/* orientationで示す方向で、マスタービューを隠すかどうか
* UISplitViewControllerのビュー表示時、あるいはデバイス方向を変えたときに呼ばれる
*/
- (BOOL)splitViewController:(UISplitViewController *)svc // ← UISplitViewController
shouldHideViewController:(UIViewController *)vc // ← マスタービューのビューコントローラ
inOrientation:(UIInterfaceOrientation)orientation // ← 方向(UISplitViewController)
{
// 縦方向のときは隠す。横方向では表示
return UIInterfaceOrientationIsPortrait(orientation);
}
또, 다른 -splitViewController:willHideViewController:withBarButtonItem:forPopoverController:대리자 메소드로 건네받는 UIBarButtonItem에는, UISplitViewController 오브젝트와 그 메소드가, 각각 target 및 action 프로퍼티에 세트 되고 있습니다. 따라서, 툴바나 네비게이션 바에 세트 해 두면, 유저의 조작으로 마스터 뷰를 자유롭게 내보내거나 지울 수 있습니다.
- (void)splitViewController:(UISplitViewController *)splitController
willHideViewController:(UIViewController *)viewController
withBarButtonItem:(UIBarButtonItem *)barButtonItem
forPopoverController:(UIPopoverController *)popoverController
{
NSLog(@"action:[%@] target:[%@]", NSStringFromSelector(barButtonItem.action), barButtonItem.target);
// → action:[toggleMasterVisible:] target:[<UISplitViewController: 0x…>]
}
그런데 여기에 문제가 있고, 마스터 뷰의 표시를 전환하는 수단이 UIBarButtonItem에서 밖에 제공되지 않고, 그 중에서 호출하고 있는 API가 프라이빗 API이므로, 프로그램으로부터 직접 호출할 수 없는 것입니다.
"어떤 항목을 선택할 때만 화면을 넓게 하고 사용하고 싶다""화면상의 툴바나 네비게이션 바 이외의 UI로 버튼을 설치하고 싶다"라는 유스 케이스는 자주 있습니다만, 이것으로는 그런 요구에는 응할 수 없습니다 응. 어째서 이런 설계로 했는지 모르겠지만, 어쨌든 무리한 것은 무리입니다.
그럼 어떻게 하면 좋을까. 비공개 API를 명시적으로 호출하지 않고 안전하게 표시/숨기기를 전환하는 방법은 사실 간단한 방법입니다. 다음과 같이 barButtonItem의 target 및 action 속성 정보를 그대로 사용하여 메시지를 보냅니다.
// UISplitViewControllerにMasterビューの表示切り替えを要求する
// ※ barButtonItemはデリゲートメソッドで届いたときに保持しておく
[barButtonItem.target performSelector:barButtonItem.action];
이렇게 하면 UISplitViewController의 내부 API를 접하고 알지 않고 목적을 달성할 수 있습니다. 어떤 UI나 제스처라도 뷰의 표시를 바꿀 수 있군요.
@ikesyo 씨, Twitter로 곤란하고 있을 때에 코멘트 해 주셔서 감사합니다.
Reference
이 문제에 관하여(UISplitViewController의 마스터 뷰 표시/숨기기 전환), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://qiita.com/hkato193/items/5eb832617efb1b1af917텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)