【iOS开发-107】UISplitViewController:如何取得master和detail控制器,核心在于如何运用代理
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中获取。
郑重声明:本站内容如果来自互联网及其他传播媒体,其版权均属原媒体及文章作者所有。转载目的在于传递更多信息及用于网络分享,并不代表本站赞同其观点和对其真实性负责,也不构成任何其他建议。