2012-11-20 2 views
3

탭 중 하나에 앱 설정이 표시되는 UITabBarController 앱이 있습니다. 이것은 마스터에서 선택된 항목에 따라 변경되는 여러 세부 컨트롤러가있는 UISplitViewController입니다. 내 detailViewControllers는 지속적으로 보여 마스터보기를 할 수 있습니다 (또는해야한다)이 라인을 가지고 :iPad의 iOS 5 UISplitViewController가 Portrait에서 MasterView를 표시하지 않습니다 (처음에는 처음에만)

- (void)viewDidLoad 
{ 
    [super viewDidLoad]; 
    self.splitViewController.delegate = self; 
} 

- (BOOL) splitViewController:(UISplitViewController *)svc shouldHideViewController:(UIViewController *)vc inOrientation:(UIInterfaceOrientation)orientation { 
    return NO; 
} 

여기 내 문제가있다 : 패드는 설정 탭이 도청으로 세로 인 경우, 초기 자세히보기가 표시됩니다. 주인이 아니야. 패드를 가로 및 세로로 회전 시키면 마스터가 잘 보이고 그대로 있습니다.

왜 이런 일이 발생하는지 알 수 없습니다. XCode 4.5.2 마스터/세부 템플릿 프로젝트는 마스터를 숨기지 않도록 detailController를 업데이트 한 후에이 문제가 발생하지 않습니다.

아이디어가 있으십니까?

답변

1

문제를 해결하려면 원래 질문에서 사용한 것과 동일한 코드를 사용해야했지만 서브 클래 싱 된 UISplitViewController에 넣어야했습니다. 원래는 자세히보기에 넣었습니다.

+0

너는 굉장하고 너는 그것을 알아야한다. 정말 고맙습니다! – Dumoko

3

방금이 같은 문제가 있었지만 적절한 시간에 내 UISplitViewController 대리인이 설정되었는지 다시 확인하여 알아 냈습니다. 이 올바르게 작동 엑스 코드 샘플 프로젝트의 AppDelegate에에 한 짓을

주의 사항 :

- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions 
{ 
    // Override point for customization after application launch. 
    if ([[UIDevice currentDevice] userInterfaceIdiom] == UIUserInterfaceIdiomPad) { 
     UISplitViewController *splitViewController = (UISplitViewController *)self.window.rootViewController; 
     UINavigationController *navigationController = [splitViewController.viewControllers lastObject]; 
     splitViewController.delegate = (id)navigationController.topViewController; 
    } 
    return YES; 
} 

그것은 구체적으로 특정 뷰 컨트롤러에 UISplitViewController 대리자를 설정하는 것입니다.

약간의 복잡한 viewcontroller 관리를 SplitViewController에서 사용하기 때문에 제 목적으로는 AppDelegate를 SplitViewControllerDelegate로 설정했습니다.

위임자가 application : didFinishLaunchingWithOptions : 내에 올바르게 설정되도록하십시오. 문제가 없어야합니다.

+0

다른 앱에서 작업하는 동안 내 답변을 찾았습니다. 아래를 참조하십시오. –

+0

오늘 제가 업데이트하려고 시도했던 아주 오래된 코드로이 똑같은 것을 보았습니다. 보기 컨트롤러가 분할 뷰에 추가되기 전에 위임자가 설정되었는지 확인해야했습니다 (예 : 이전 코드). 일단 내가 그렇게하면, 그것은 잘 동작했다. –

0

나는이 문제에 대한 발견 간단한 수정은 AppDelegate에이 방향 위임했다 있는지 확인했다 :

- (BOOL)shouldAutorotateToInterfaceOrientation:(UIInterfaceOrientation)interfaceOrientation 
{ 
    return YES; 
} 
0

내가 너무 늦기 알을하지만 난 이익을 취할 수있는이 그래서 다른에서 탈출하는 방법을 보여주고 싶은 .

- (IBAction)hideMaster 
{ 
    // 1. set desired width for master view 
    [self.splitViewController setValue:[NSNumber numberWithFloat:0.0] forKey:@"_masterColumnWidth"]; 

    // 2. splitViewController delegate to self 
    self.splitViewController.delegate = self; 

    // 3. give a smooth animation 

    [UIView animateWithDuration:1.0 animations:^{ 
     [self.splitViewController.view layoutSubviews]; 
    }]; 
} 

- (BOOL)splitViewController: (UISplitViewController*)svc shouldHideViewController:(UIViewController *)vc inOrientation:(UIInterfaceOrientation)orientation __OSX_AVAILABLE_STARTING(__MAC_NA,__IPHONE_5_0); 
{ 
    return NO; 
} 
관련 문제