2011-11-07 9 views
2

私は各項目にsplitviewcontrollerを持つタブバーを持っています。私はそのサイトhttps://github.com/grgcombs/IntelligentSplitViewControllerのサブクラスを使用していましたが、iOS 4ではうまくいきましたが、iOS 5では問題があります。ポートレートモードでアプリを起動してから、横向きに変更してタブバーの2番目の項目に移動し、もう一度ポートレートモードに変更してポップオーバーをクリックし、ポップオーバーを解除し、タブバーの最初の項目に移動し、ランドスケープに変更すると、マスタービューは消え、ポップオーバーは引き続き表示されます。どのようにそれを修正するために誰もが考えている?iOS 5のUITabBarControllerのUISplitViewController

答えて

1

私は同じ問題を解決するために取り組んでいます。 UISplitViewControllerサブクラスを使用する代わりに、回転メッセージを含むすべてのUISplitViewControllersに回転メッセージを正しく伝播するUITabBarControllerサブクラスを作成しました。これにより、UISplitViewControllerの正しい内部状態が維持されます。 SplitViewControllerが表示されていない場合、SplitViewControllerデリゲートメソッドの1つが呼び出されないので、詳細ビューコントローラでこれを処理します。私は徹底的にこれをテストしていませんiOS6.1

OSTabBarController.m

#import "OSTabBarController.h" 

@implementation OSTabBarController 

-(void)willRotateToInterfaceOrientation:(UIInterfaceOrientation)toInterfaceOrientation duration:(NSTimeInterval)duration{ 
    [super willRotateToInterfaceOrientation:toInterfaceOrientation duration:duration]; 
    for(UIViewController *targetController in self.viewControllers){ 
     if(targetController != self.selectedViewController && [targetController isKindOfClass:[UISplitViewController class]]){ 
      [targetController willRotateToInterfaceOrientation:toInterfaceOrientation duration:duration]; 
     } 
    } 
} 

-(void)didRotateFromInterfaceOrientation:(UIInterfaceOrientation)fromInterfaceOrientation{ 
    [super didRotateFromInterfaceOrientation:fromInterfaceOrientation]; 
    for(UIViewController *targetController in self.viewControllers){ 
     if(targetController != self.selectedViewController && [targetController isKindOfClass:[UISplitViewController class]]){ 
      [targetController didRotateFromInterfaceOrientation:fromInterfaceOrientation]; 
     } 
    } 
} 

@end 

DetailViewController

@implementation OSDetailViewController 

-(void)viewWillAppear:(BOOL)animated{ 
    //the splitViewController:willHideViewController:withBarButtonItem:forPopoverController: may not have been called 
    if(!UIInterfaceOrientationIsPortrait(self.interfaceOrientation)){ 
     self.navigationItem.leftBarButtonItem = nil; 
    } 
} 

#pragma mark - UISplitViewControllerDelegate Methods 

- (void)splitViewController:(UISplitViewController *)splitController willHideViewController:(UIViewController *)viewController withBarButtonItem:(UIBarButtonItem *)barButtonItem forPopoverController:(UIPopoverController *)popoverController 
{ 
    [self.navigationItem setLeftBarButtonItem:barButtonItem animated:YES]; 

} 

- (void)splitViewController:(UISplitViewController *)splitController willShowViewController:(UIViewController *)viewController invalidatingBarButtonItem:(UIBarButtonItem *)barButtonItem 
{ 
    [self.navigationItem setLeftBarButtonItem:nil animated:YES]; 
} 

@end 
+0

を、このアプローチ - 私は、これはiOS5.0で動作確認されましたこれまでのところ問題を解決したようだ。 – Chiubaka

+0

素晴らしい!数多くのプロダクションアプリでうまく動作しています。 –

関連する問題