Ipad iOS 5中UITabBarController中的UISplitViewController

Ipad iOS 5中UITabBarController中的UISplitViewController,ipad,uitabbarcontroller,ios5,uisplitviewcontroller,Ipad,Uitabbarcontroller,Ios5,Uisplitviewcontroller,我在每个项目上都有一个带有splitviewcontroller的选项卡栏。我使用了该站点的一个子类,在iOS 4中,每个子类都工作得很好,但在iOS 5中,我遇到了一个问题。当我在纵向模式下启动应用程序,然后切换到横向并切换到选项卡栏中的第二项,然后再次切换到纵向模式并单击弹出框,然后关闭弹出框,切换到选项卡栏中的第一项,再次打开弹出框并切换到横向时,主视图消失,弹出框仍然可见。有人知道怎么解决吗?我一直在努力解决同样的问题。我没有使用您指定的UISplitViewController子类,而

我在每个项目上都有一个带有splitviewcontroller的选项卡栏。我使用了该站点的一个子类,在iOS 4中,每个子类都工作得很好,但在iOS 5中,我遇到了一个问题。当我在纵向模式下启动应用程序,然后切换到横向并切换到选项卡栏中的第二项,然后再次切换到纵向模式并单击弹出框,然后关闭弹出框,切换到选项卡栏中的第一项,再次打开弹出框并切换到横向时,主视图消失,弹出框仍然可见。有人知道怎么解决吗?

我一直在努力解决同样的问题。我没有使用您指定的UISplitViewController子类,而是创建了一个UITabBarController子类,该子类将旋转消息正确传播到它包含的所有UISplitViewController。这将保持UISPlitViewController的正确内部状态。但是,如果SplitViewController不可见,则不会调用其中一个SplitViewController委托方法,因此我将在详图视图控制器中处理此问题。我已经在iOS5.0-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

我还没有对此进行彻底测试,但这种方法是有意义的,到目前为止似乎已经解决了问题。