2011-01-10 5 views
7

UISplitViewControllerUITabBarController 내부에서 UIViewController을 분할 뷰의 마스터 창에 사용하고 UINavigationController를 자체 창에 바닐라 UIViewController가 들어있는 세부 창에 사용하고 있습니다.호출되지 않은 메서드를 위양하는 UISplitViewController

애플은 루트 레벨에서만 분할보기를 사용하도록 권고하고 있지만, 분할보기를 탭으로 사용하는 다른 응용 프로그램 (예 : Amazon-Wish List 탭)을 보았 기 때문에 가능하다고 확신합니다. .

내 문제는 분할 뷰의 대리자 메서드 즉, UISplitViewControllerDelegate에있는 사람들이 호출되지 않아 Portrait 모드로 전환 할 때 팝업 메뉴가 나타나지 않습니다.

문제의 방법은 다음과 같습니다. -

// Called when a button should be added to a toolbar for a hidden view controller 
- (void)splitViewController: (UISplitViewController*)svc willHideViewController:(UIViewController *)aViewController withBarButtonItem:(UIBarButtonItem*)barButtonItem forPopoverController: (UIPopoverController*)pc; 

// Called when the view is shown again in the split view, invalidating the button and popover controller 
- (void)splitViewController: (UISplitViewController*)svc willShowViewController:(UIViewController *)aViewController invalidatingBarButtonItem:(UIBarButtonItem *)barButtonItem; 

// Called when the view controller is shown in a popover so the delegate can take action like hiding other popovers. 
- (void)splitViewController: (UISplitViewController*)svc popoverController: (UIPopoverController*)pc willPresentViewController:(UIViewController *)aViewController; 

UISplitViewController는 회전 알림을받습니다.

 [[UIApplication sharedApplication] setStatusBarOrientation:UIInterfaceOrientationLandscapeRight]; 

를 사용하여 응용 프로그램 시작 부분에 가로 또는 오른쪽으로 상태 표시 줄 방향을 강제로 설정하면 willShowViewController 메서드를 호출 할 수 있습니다. 그러나 willHideViewController doesn 전화하지 마. 그리고 나는 앱을 풍경에서 시작하도록하고 싶지 않다. 내가 똑같은 일을하지만 인물 사진을 찍으 려한다면 콜백을받지 못합니다.

분할보기 컨트롤러가 그렇지 않으면 올바르게 작동 할 때 대리자 메서드를 호출하지 않는 이유를 모르겠다. 이러한 메소드는 내부적으로 메소드

- (void)willRotateToInterfaceOrientation:(UIInterfaceOrientation)toInterfaceOrientation duration:(NSTimeInterval)duration 

에서 호출되어야하며 내부에서 중단 점을 만들 때 위임자가 설정되어 있고 아직 활성 상태인지 확인할 수 있습니다.

하루 종일 붙어있어! 다른 모든 것은 훌륭하게 작동하고 있으며 splitview/tabbar/navbar 조합이 잘 작동하는 것을 매우 기쁘게 생각합니다. 이 알림이 필요합니다.

회전 할 때 수동으로 호출해야할까요? `UISplitViewController '가이를 수행해야 할 때 매우 잘못되었습니다.

답변

4

해결되었지만 루트 수준이거나 루트 수준에 있어야하는 tabBar의 직접 하위보기에 있어야합니다. 성가신!

+0

안녕하세요, 해결책을 조금 더 자세하게 설명해 주시겠습니까? 저는 지금 같은 종류의 문제가 있습니다. 나는 3 탭에서 splitview가있는 1 tabcontroller 있어요. 각 splitview에 detailview를 추가하여 splitview를 위임 한 자체 서브 클래 싱 된 navigationcontroller에 추가했습니다. 현재 보이는 탭에서는 완벽하게 작동하지만 다른 탭에서는 작동하지 않습니다. 그래서 내보기를 회전하고 그것을 바꿀 때까지 모든 엉망으로 보이는 탭을 변경할 때. 다시 한 번, 가시적 인보기에만 해당됩니다. –

+0

흠, 죄송합니다. 나는 어딘가에 splitview 탭과 회전 사이의 변경으로 인해 문제가 발생했음을 알리는 게시물을 보았을 것입니다. splitviwe은 항상 윈도우 레벨에 있어야합니다. 탭 컨트롤러. 내가 추측하는 워드 프로세서에 의해 백업됩니다. 실제로 수평 분할이 필요하므로 처음부터 SplitView를 빌드하는 경로를 취하고 있습니다. – Sam

+1

처음부터 시도해 보는 대신 http://mattgemmell.com/2010/07/31/mgsplitviewcontroller-for-ipad – Viraj

3

먼저 올바른 대리인을 설정했는지 확인하십시오. 는, 예를 들어, 당신은 방향 변경, 상세보기 도구 모음에서 버튼을 넣을 수있을 것입니다 때, 그래서 당신은, 상세 뷰에서 위임 프로토콜을 구현 세 컨트롤러,

UISplitViewController* splitView; 
UIViewController* masterView; 
UIViewController* detailView; 

을 만들어 말할 수 있습니다.

splitView가 위임자로부터이 함수를 호출하려면 위임 자체를 설정해야합니다.다음 전화를 누락 된 경우

은 그래서 어딘가,

splitView.delegate = detailView; 

detailView의 내가이 부착 된 위치 적어도이는 등 방향 변경을 통보하지받을 않습니다.

다른 옵션은 아래 링크를 살펴 보는 것입니다. 그것도 완전히 작동하는 코드를 가지고 있습니다 만, 약간 검토 한 후에는 일을하기 위해 필요한 것보다 조금 더 많을 수 있습니다.하지만 이봐 요. 그것은 이미 작동하는 코드이므로 빨리 진행해야합니다. .

http://www.noorselijster19.com/2011/03/ios/combine-tabbar-and-splitview/

2

난 디테일의 UIViewController에 마스터의 UIViewController에서 메시지를 전송하는 방법은 다음처럼. 어딘가에 마스터의 구현 내부 :

id detailViewController = [[self.splitViewController viewControllers] lastObject]; 
[detailViewController setSomeProperty:…]; 

이 물론 바울 Hegarty의 2011 년 가을 스탠포드 iTunesU 아이 패드와 아이폰 응용 프로그램 개발에서입니다.

+0

상자 밖에서 생각하기 때문에 너의 생각이 너무 좋아. . –

관련 문제