UISplitViewController也是iPad的特有类。用storyboard方式创建UISplitViewController暂且不谈。
(1)直接从代码创建的话,先在AppDelegate中设置window的根控制器
- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions {
self.window=[[UIWindow alloc]initWithFrame:[UIScreen mainScreen].bounds];
WPMainSplitViewController *splitVc=[[WPMainSplitViewController alloc]init];
self.window.rootViewController=splitVc;
[self.window makeKeyAndVisible];
return YES;
}
然后在我们的主角WPMainSplitViewController中设置细节(继承自UISplitViewController的一个类)
- (void)viewDidLoad {
[super viewDidLoad];
//设置两个装有tableView的导航控制器作为左右视图
LeftTableViewController *left=[[LeftTableViewController alloc]init];
UINavigationController *leftNav=[[UINavigationController alloc]initWithRootViewController:left];
RightTableViewController *right=[[RightTableViewController alloc]init];
UINavigationController *rightNav=[[UINavigationController alloc]initWithRootViewController:right];
self.viewControllers=[NSArray arrayWithObjects:leftNav,rightNav, nil];
其实,就可以了。
(2)常用的是代理。分隔视图控制器有自带的代理,UISplitViewControllerDelegate
比如,在上面的代码中加入:
- (void)viewDidLoad {
[super viewDidLoad];
......
self.delegate=right;
……
}
然后在right这个表视图控制器中就可以实现代理方法(常用的比如监听APP转向时master视图的隐藏和显示):隐藏时detail视图的左上角出现BarButtonItem用于点击出现master视图,显示时就不出现这个BarButtonItem。
//显示或者隐藏一般都是针对左边的那个菜单式的视图
-(void)splitViewController:(UISplitViewController *)svc willShowViewController:(UIViewController *)aViewController invalidatingBarButtonItem:(UIBarButtonItem *)barButtonItem{
//按钮点击事件官方已经封装
self.navigationItem.leftBarButtonItem=nil;
}
-(void)splitViewController:(UISplitViewController *)svc willHideViewController:(UIViewController *)aViewController withBarButtonItem:(UIBarButtonItem *)barButtonItem forPopoverController:(UIPopoverController *)pc{
barButtonItem.title=@"班级";
self.navigationItem.leftBarButtonItem=barButtonItem;
}
(3)当然,更正常的应该是点击左边的视图中得东西,右边会出现对应的视图。这个也是用代理。不过这个时候的代理就是detail视图(右边)是master驶入(左边)的代理。
- (void)viewDidLoad {
[super viewDidLoad];
//当需要点击左边,右边做出响应时,可以利用代理(取出左右两边的控制器,并设置代理)
LeftTableViewController *leftOne=[self.viewControllers firstObject];
RightTableViewController *rightOne=[self.viewControllers lastObject];
leftOne.delegate=rightOne;
}
注意:一般项目中不是直接在split视图控制器中写出master和detail视图控制器,所以如果要取得左右2个视图的话,需要用如上得方法获取,即用firstObject和lastObject从self.viewControllers中获取。