尽管这不是一个新的话题,但是实际上UIView是很多控件的基础类,而且界面的布局基本是基于UIView来的,当然我们也可以使用CGLayer,本文仅列举一些个人在使用UIView过程中的经验和大家分享。大部分的内容来源于UIView Programming Guide,这个guide大家可以在xcode的帮助文档里面查到也可以在苹果的官网中找到。
首先说说Interface Builder. 在创建一个UIView的时候,我们往往会创建一个UIViewController,这使用了MVC模式,在controller里面实现业务逻辑,和model以及用户界面打交道。在xcode的创建UIViewController的向导里面可以勾选With Xib for user interface来创建一个xib文件,Xib可以被interface builder打开,之所以需要这个文件主要是为了降低用程序来控制页面控件的代码量,比如如果你需要一个UILabel,并且把它放在页面上部,如果你用Interface Builder你需要做的是将一个Label控件从Object Library里面拖到你想要的位置,如果用代码,则你需要用UILabel的initWithFrame设置你要放置该控件的位置,然后使用addSubView将其加入到parent view之中:
[self.view addSubView : titleLabel];
在Interface Builder的另一个要完成的事情是将你所拖放到界面里的控件和UIViewController里面的代码绑定起来,其中包含两种连接,第一种是将UIViewController里面的成员变量和界面上的控件绑定,比如在IB中加入了一个label,现在为了在controller里面使用这个label,我们需要:
1. 在UIViewController里面新增一个UILabel成员.
2.添加@property(nonatomic, retain) UILabel* wordLabel; 在.m文件里面增加@synthesize wordLabel
3.为这个property增加IBOutlet,我单独把这一步和第二步分开,一般的类的property我们并不需要这个IBOutlet,但是如果我们需要在Interface Builder里面的控件和类里面的某个元素关联并出现在InterfaceBuilder里面我们就需要这个关键字 @property(nonatomic, retain) IBOutlet UILabel* wordLabel;
4. 回到interfacebuilder,点选File's Owner,按住control键鼠标拖动到label控件上松开,无论你拖到ui窗体上面的label控件或者左边树状控件图上的Label控件都可以,这时会弹出一个黑色的小窗口,里面出现了wordlabel,也就是我们刚刚加入的那个property,选择它,控件就绑定好了,这时UIViewController就知道其成员wordlabel和这个label控件是关联的了。
5.Interface Builder另一种绑定是绑定控件的事件到controller里面的代码,我们现在拖动一个button到界面上,然后回到UIViewController中。在.h文件中声明一个方法 -(IBAction) onWordChangeClicked:(id) sender; 在.m中写个简单的该方法的实现:
{
wordLabel.text=@"Changed";
}
这个方法和其他方法不同的是IBAction,正是这个返回值告诉Controller这个方法是用来绑定IB里面的控件的
接下来我们把这段代码和刚拖到页面上的button绑定起来。 回到interface builder,选中button控件,按住control键,拖动到file's owner放开,弹出的小黑框出现了我们刚输入的方法,选中它以关联控件和其click事件,不过这里既然是移动设备我们不能叫click事件,准确的名称是Touch Up Inside事件,当你触摸这个button的时候触发。
OK, done!运行一下看看效果吧