2014-11-21 2 views
0

iPad와 같은 분할보기 컨트롤러를 처리하는 6 Plus 이외의 iPhone에서 분할보기 컨트롤러를 처리하는 방법이 혼란합니다. 디테일 뷰 컨트롤러가 그 아이폰에 나타나는 루트보기 컨트롤러가되기를 원합니다.iPhone의 UISplitViewController에 대한 상세보기 컨트롤러

편집 나는이 두 대리자 메서드를 추가하여 원하는 동작을 얻을 수있었습니다. 이제 분할보기 컨트롤러가 iPhone의 마스터보기 컨트롤러 대신 상세보기 컨트롤러로 축소됩니다.

- (UIViewController *)primaryViewControllerForCollapsingSplitViewController:(UISplitViewController *)splitViewController 
{ 
    return self.detailNavigationController; 
} 

- (BOOL)splitViewController:(UISplitViewController *)splitViewController collapseSecondaryViewController:(UIViewController *)secondaryViewController ontoPrimaryViewController:(UIViewController *)primaryViewController 
{ 
    return YES; 
} 

내가 아이폰에 대한 상세 뷰 컨트롤러의 네비게이션 컨트롤러에 내 마스터 뷰 컨트롤러를 누르면 내가 콘솔에서 지금이 메시지를 받고 있어요 1

문제. 그것은 잘 작동 그래서 나는 왜이 메시지를 받고 이해가 안 돼요.

Unbalanced calls to begin/end appearance transitions for <MasterTableViewController: 0x7fc8d2b67220>. 

문제는 2

나는 분할 뷰 컨트롤러가 아이폰에 붕괴 때를 감지 할 수있는 좋은 방법에 명확하지 않다. 이 변경 감지하려면 UIViewControllerShowDetailTargetDidChangeNotification 알림을 사용하고 있지만이 변경 일종의 대리 메서드가 있어야 같은 느낌.

+0

답변에서보세요 http://stackoverflow.com/questions/25875618/uisplitviewcontroller-in-portrait-on-iphone-shows -detail-vc-master 대신 도움이 될 수도 있습니다. –

답변

1

기본 템플릿을 사용하여 UISplitViewController을 만든 경우,이 방법은 작은 화면 장치에서 UISplitViewController의 기본 동작을 처리 YES 반환하는 경우 AppDelegate에이 방법은

- (BOOL)splitViewController:(UISplitViewController *)splitViewController collapseSecondaryViewController:(UIViewController *)secondaryViewController ontoPrimaryViewController:(UIViewController *)primaryViewController { 
    if ([secondaryViewController isKindOfClass:[UINavigationController class]] && [[(UINavigationController *)secondaryViewController topViewController] isKindOfClass:[DetailViewController class]] && ([(DetailViewController *)[(UINavigationController *)secondaryViewController topViewController] detailItem] == nil)) { 
     // Return YES to indicate that we have handled the collapse by doing nothing; the secondary controller will be discarded. 
     return YES; 
    } else { 
     return NO; 
    } 
} 

를 해결하기 위해 파일을 찾을 것이다 문제는 NO를 반환해야합니다.

- (BOOL)splitViewController:(UISplitViewController *)splitViewController collapseSecondaryViewController:(UIViewController *)secondaryViewController ontoPrimaryViewController:(UIViewController *)primaryViewController { 
    if ([secondaryViewController isKindOfClass:[UINavigationController class]] && [[(UINavigationController *)secondaryViewController topViewController] isKindOfClass:[DetailViewController class]] && ([(DetailViewController *)[(UINavigationController *)secondaryViewController topViewController] detailItem] == nil)) { 
     // Return YES to indicate that we have handled the collapse by doing nothing; the secondary controller will be discarded. 
     return NO; 
    } else { 
     return NO; 
    } 
} 

아래의 코드와 방법을 바꾸기는이 질문에 대한 documentation

+0

답변 해 주셔서 감사합니다. 세부보기 컨트롤러는 대리자를 사용하지 않고 분할보기 컨트롤러에서 올바르게 삭제됩니다. 나는 그것을 발표 할 수 없다. 나는 계속해서 '모범적으로 활성 컨트롤러를 제시하려고했습니다'라는 충돌이 발생합니다. –