UISplitViewController使用记录

记录一下写一个ipad上第一次使用splitViewController的过程,


1。使用storyBoard,将storyBoard中的View 删掉,拖入一个splitVC,将程序的入口指向split ,同时,将AppDelegate中的window的rootVC 设为splitVC

2.新建两个VC,分别是master(LeftMenuTableViewController) 和detail(DetailViewController) ,不需要xib,


@interface LeftMenuTableViewController : UITableViewController


@end


@interface DetailViewController : UIViewController

@property (nonatomic,strong)UIBarButtonItem *splitViewBarButtonItem;

@property (nonatomic,strong)UIPopoverController *iMasterPopOver;



- (void)setSplitViewBarButtonItem:(UIBarButtonItem *)barButtonItem;

@end



@implementation DetailViewController



- (void)setSplitViewBarButtonItem:(UIBarButtonItem *)barButtonItem{



    if (_splitViewBarButtonItem)

        self.navigationItem.leftBarButtonItems = nil;

    

    if (barButtonItem)

        self.navigationItem.leftBarButtonItem = barButtonItem;

    _splitViewBarButtonItem = barButtonItem;

}


@end





然后在storyBoard中将split 的master 和detail两个VC的class改成相应的新建的管理类。同时,左侧master应该作为split的delegate(注意:应在storyBoard中连接,否则程序最开始为竖屏时,不会显示BarButtonItem)

splitVC的Delegate 方法是用来实现横竖屏master 显示/隐藏


- (void)splitViewController:(UISplitViewController *)svc willHideViewController:(UIViewController *)aViewController withBarButtonItem:(UIBarButtonItem *)barButtonItem forPopoverController:(UIPopoverController *)pc{

    

    barButtonItem.title = Locale(@"Menu"); // use a better word than “Master”!

    UINavigationController *rightVC = (UINavigationController*)[svc.viewControllers lastObject];

    DetailViewController *vc = (DetailViewController*)[rightVC.viewControllers objectAtIndex:0];

    vc.splitViewBarButtonItem = barButtonItem;

    vc.iMasterPopOver = pc;


}


- (void)splitViewController:(UISplitViewController *)svc willShowViewController:(UIViewController *)aViewController invalidatingBarButtonItem:(UIBarButtonItem *)barButtonItem{

    UINavigationController *rightVC = (UINavigationController*)[svc.viewControllers lastObject];

    DetailViewController *vc = (DetailViewController*)[rightVC.viewControllers objectAtIndex:0];

    vc.splitViewBarButtonItem = nil;

    vc.iMasterPopOver = nil;

    

}

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

   

    return UIInterfaceOrientationIsPortrait(orientation);


}





3.设置splitVC的左右两个VC时,需同时设置


 UISplitViewController *rootVC = (UISplitViewController*)self.window.rootViewController;

 UIViewController *vc = [[UIViewController allocinit];

 UINavigationController *nav = [[UINavigationController allocinitWithRootViewController:vc];

 NSArray *vcarr = [NSArray arrayWithObjects:[rootVC.viewControllers objectAtIndex:0],nav, nil];

 rootVC.viewControllers = vcarr;



4.在切换右侧时,由于重新init,所以会没有BarButtonItem,所以

1)DetailVC是右侧的一个父类,有splitBarButtonItem属性,也同时实现 splitDelegate 在显示/隐藏 master时来显示/隐藏 BarButtonItem

2)在切换VC时,把当前右侧的BarButtonItem取出来给新的VC

3)viewDidLoad时,重新调用setBarButtonItem方法

4)父类重新设置BarButton

a:先把之前的nil(toolBar上)

b:抚给新的BarButtonItem(放在toolBar上)

c:赋给属性


点击左侧tableCell ,切换右侧的代码


 AppDelegate *delegate = (AppDelegate*)[UIApplication sharedApplication].delegate;

    UISplitViewController *rootVC = (UISplitViewController*)delegate.window.rootViewController;


    UINavigationController *rightNav = (UINavigationController*)[rootVC.viewControllers lastObject];

    DetailViewController *right =(DetailViewController*)[rightNav.viewControllers objectAtIndex:0];

    if (right.iMasterPopOver) {

        [right.iMasterPopOver dismissPopoverAnimated:YES];

    }

    

    if (self.iSelectIndexPath.row == indexPath.row && self.iSelectIndexPath.section == indexPath.section) {

        return;

    }

    UITableViewCell *cellBefore = [tableView cellForRowAtIndexPath:self.iSelectIndexPath];

    cellBefore.backgroundColor = [UIColor clearColor];

    

    UITableViewCell *cell = [tableView cellForRowAtIndexPath:indexPath];

    cell.backgroundColor = [UIColor lightGrayColor];

    

    self.iSelectIndexPath = indexPath;

    

    UINavigationController *leftnav =[rootVC.viewControllers objectAtIndex:0];

    

        UIViewController *vc = [[UIViewController alloc] init];

        if (right.splitViewBarButtonItem) {

            vc.splitViewBarButtonItem =  right.splitViewBarButtonItem;

            vc.iMasterPopOver = right.iMasterPopOver;

        }

        

        rightNav = [[UINavigationController alloc] initWithRootViewController:vc];

        NSArray *vcarr = [NSArray arrayWithObjects:leftnav,rightNav, nil];

        rootVC.viewControllers = vcarr;

        

    

        UIViewController 是DetailViewController的子类




5.想点击左侧切换右边并且隐藏左边,需给右边一个pc(是从delegate方法传过去的,这个值会在右边一直保持,点击左边时,第四missPopover)(不能给左边,因为左边不是一直存在,原因暂时还没清楚)

  • 2
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值