2.25 Presenting Master-Detail Views with UISplitViewController

本文介绍如何在iPad上使用UISplitViewController实现左右分屏应用,包括主视图控制器与详细视图控制器的通讯、界面切换及代码实现细节。重点展示了模板中的关键接口实现,以及主次视图控制器之间的通讯方式。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

IPad的屏幕比较大,应该有更好的利用方式,能不能同时放两个Viewcontroller的View呢?可以的,用UISplitViewController。iPad上的设置不就是分成左右两个么。

UISplitViewController只能在iPad上使用,在其他设备上将会异常。

Xcode有提供Master-Detail Application模版,可以很方便看到UISpliViewController的使用例子。

工程中有两个非常重要的控制器
RootViewController 主视图控制器
 在iPad上,主视图在左边,iPhone上它是第一个视图
DetailViewController 详细视图控制器
 在iPad上,详细视图显示在右边,iPhone上它将作为新的视图显示出来


这里需要考虑的是主视图控制器与详细试图控制器的通讯问题,你可以通过app delegate 来通讯,也可以通过主视图控制器发消息给详细试图控制器,两者都可以。

此时当你运行程序切换到详细试图并旋转iPad,你会发现主视图消失了,只在详细视图上多出个导航按钮。其实这也不错了,可是我们不喜欢不是,你看设置那边,旋转过来时,主视图仍然在左边显示,它是怎么做到的呢?很简单,apple已有api可用,在详细试图控制器里面实现这个接口(ios5.0):
- (BOOL) splitViewController:(UISplitViewController *)svc
 shouldHideViewController:(UIViewController *)vc
 inOrientation:(UIInterfaceOrientation)orientation{
  return NO;
}

模版中默认是没有实现上面的接口的,返回的值相当于return yes. 这是需要实现另外两个接口:
- (void)splitViewController:(UISplitViewController *)svc
willHideViewController:(UIViewController *)aViewController
withBarButtonItem:(UIBarButtonItem *)barButtonItem
forPopoverController: (UIPopoverController *)pc{
barButtonItem.title = @"Master";
NSMutableArray *items = [[self.toolbar items] mutableCopy];
[items insertObject:barButtonItem atIndex:0];
[self.toolbar setItems:items animated:YES];
self.popoverController = pc;
}
- (void)splitViewController:(UISplitViewController *)svc
willShowViewController:(UIViewController *)aViewController
invalidatingBarButtonItem:(UIBarButtonItem *)barButtonItem{
NSMutableArray *items = [[self.toolbar items] mutableCopy];
[items removeObjectAtIndex:0];
[self.toolbar setItems:items animated:YES];
self.popoverController = nil;
}

在我创建的模版中,代码与书上的有点不同,上面的是书上的代码。主要是提供了再主视图隐藏时,有个按钮可以把它呼出来。当然了也可以通过滑动手势把它呼出来。


再来说说主次试图控制器通讯的问题,书上说在主视图控制器可以通过app Delegate 在拿到详细试图控制器。可是在我的模版里面,主视图直接就有个访问详细试图的属性,可能是模版更新了吧。

 

 

 

 

 

 

 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值