斯坦福大学IOS开发课程笔记(第七课第一部分)

转载请注明出处

http://blog.csdn.net/pony_maggie/article/details/31462099


作者:小马


这节课的内容太多,分两部分介绍。本节课主要是介绍如何开发基于ipad的应用程序,涉及到了一些只有ipad才有的类,接口等。

 


先讲到UIToolbar工具栏,常用的UI控件。在工具栏上按钮一样的东西叫UIBarButtonItems,可以像一般按钮一样操作它,比如建立outlet,action等。使用的时候只要从工具箱里拖到视图中就可以了,当然如果你想动态的控制,用代码实现也是没问题的,第二部分的demo程序就会涉及到这一点

 


上图看到的UI效果叫分屏视图(split view),有一个控制器类叫UISplitViewController。 这个是只在ipad应用下才有的,也就是你新建工程时,要选择ipad或universal应用,才可以使用这个类。当然这个视图控件也只有在基于ipad的storyboard(一个工程可以有多个storyboard,后面的代码示例会看到这个用法)中才可以拖出来使用。应该可以理解为只有ipad才有这样的控件,毕竟屏幕比较大这样的显示效果才有意义。

 

 


既然是分屏,左边的叫全局栏(master),右边的叫细节栏(detail)。UISplitViewController本身有个NSArray类型属性叫viewControllers,数组第一个元素是master,第二个是detail。

 

 


分屏视图和代理(delegate)是永远不分家的,如果没有代理你会发现ipad竖屏时,左边栏会消失,你无法从任何地方开启它(正常情况下,是要有个toolbar上的按钮,按一下,左边栏会出现)。 这个在后面的代码示例中,我还会讲到。

 

这里既然提到ipad竖屏, 就多说一些,分屏视图在转到竖屏时,有两种显示方案,一是上面提到的左边栏消失,不过会在toolbar上放一个button,按一下就可以以Popover(后面会介绍)的形式弹出来。还有一种是左右同时显示,但是要”挤压”一下,就像ipad里的设置功能的UI一样。具体用哪一种还是要根据实际开发的功能以及显示效果。

 

 

 




我们一次讲完上面三幅图,说的是同一个函数,

[objc]  view plain copy 在CODE上查看代码片 派生到我的代码片
  1. (BOOL)splitViewController:(UISplitViewController*)sender  
  2.   shouldHideViewController:(UIViewController *)master  
  3.              inOrientation:(UIInterfaceOrientation)orientation  

这个函数控制左边栏在不同方向是否隐藏。从上图三张图可以看到不同实现的显示效果,很容易理解,不多说。

 

 

 

控制左边栏如何显示需要用到代理,当前视图控制器把自己作为代理,并实现

UISplitViewControllerDelegate

这个协议里的一些方法, 上面提到的那个方法就是其中之一,当然还有其它方法,如下:

[objc]  view plain copy 在CODE上查看代码片 派生到我的代码片
  1. //左边栏将要隐藏时调用(比如由横屏转到竖屏)  
  2. - (void)splitViewController:(UISplitViewController *)svc willHideViewController:(UIViewController *)aViewController withBarButtonItem:(UIBarButtonItem *)barButtonItem forPopoverController:(UIPopoverController *)pc  
  3. {  
  4.     //做两件事  
  5.     //一,把工具栏上按钮的title设置成self.title(这里是"doctor")  
  6.     //二,把按钮放到工具栏上,这个任备要由右边栏完成,因为这个时候只有右边栏是显示的。  
  7.       
  8.     barButtonItem.title = self.title;  
  9.     [self splitViewBarButtonItemPresenter].splitViewBarButtonItem = barButtonItem;  
  10.       
  11.       
  12. }  
  13.   
  14. //左边栏将要显示时调用(比如由竖屏转到横屏)  
  15. - (void)splitViewController:(UISplitViewController *)svc willShowViewController:(UIViewController *)aViewController invalidatingBarButtonItem:(UIBarButtonItem *)barButtonItem  
  16. {  
  17.     //把工具栏上的按钮移除,因为左边栏显示,所以不需要  
  18.     [self splitViewBarButtonItemPresenter].splitViewBarButtonItem = nil;  
  19. }  


 

 


这里说到如何更新细节栏,当全局栏变化时,可能要更新细节栏中的显示,有两种方法。一种是很直接的,用target/action,相当于一个响应事件,在处理函数里设置就可以,如上图。还有一种不太常用,就是用segue, 这种方法其实相当于把整个原来的右边栏视图换掉,加载一个新的视图。相当少用。不过后面的代码示例中,会用到这一点,要留意。

 

 

 

这里讲到弹出窗口(popover)的一些属性,如何设置等,还有就是如何改变弹出窗口的默认行为,比如默认情况下,popover是在用户触摸到它的区域已外时会自动关闭,可以改变这种行为。比较简单。


 第二部分会详细讲解代码示例。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值