UISplitViewController in a TabBar ( UITabBarController )?

前端 未结 9 880
长发绾君心
长发绾君心 2020-11-30 19:35

I am in kind of situation that I need to start with a tab based application and in that I need a split view for one or more tabs. But it seems that split view controller obj

9条回答
  •  广开言路
    2020-11-30 19:56

    I created a UITabBarController subclass which properly propagates the rotation messages to all UISplitViewControllers it contains. This maintains the correct internal state of the UISplitViewControllers. However, one of the SplitViewController delegate methods is not called if the SplitViewController is not visible, so I account for this in the detail view controller viewWillAppear method. I've confirmed this works in 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
    

提交回复
热议问题