ios 开发file's owner以及outlet与连线的理解

xib文件自己能够看作是一个xml,app启动的时候会根据xml构造xib对应的界面及其控件,
 file's owner 能够看作是 xib对应的类,好比 view对应的xib文件的file'owner对应的就是 viewcontrol的类, 
outlet是针对xib文件中但愿可以在外部引用的控件成员,
那么为何要作outlet与file's owner 之间的连线呢?
这里file's owner 看作咱们定义的类,即咱们的代码,里面写了哪些须要outlet的控件,
可是,具体它对应与界面上哪一个控件呢,这个对应关系是没有的,因而咱们经过
file's owner 和 label之间的连线,肯定了 咱们代码中的outlet控件与 xib中的控件的
对应。相似与 mfc中,咱们定义了一个成员,这个成员与界面上的某个控件对应。

一样的道理,咱们虽然在 viewcontrol中 定义了 ibaction,即 事件响应的代码,却未将其与
实际的 ui的事件相关联,因而咱们经过连线,将事件与代码中的响应处理对应起来。

outlet连线:control点击file's owner 拖拉到 相应控件 弹出菜单,选择 outlet名称
action连线:点击控件,在其事件列表中选择要处理的,拖拉到file's owner。
 
对xib/nib, file's owner, first responder的理解

iPhone开发广义上来说,采用MVC模型,即Model-View-Controller。其中:

        Model为数据模型,好比用户配置文件;

        View为显示的界面元素,好比一个按钮;

        Controller为控制器,是Model和View之间进行沟通的桥梁。其中View和Model之间不会直接通讯,即Model只能与Controller之间进行彼此通讯,View只能与Controller之间进行通讯。

在简单的APP中,能够没有Model,为了简单起见,本文不设计Model。

如今假设有两个独立的视图CnView和EnView,CnView和EnView上分别有个Button和Label,对于CnView,一点击Button,Label则显示“您好”,对于EnView则显示“Hello”。下面基于这个例子来回到咱们的重点。

1. XIB文件的理解

        经过IB设计的CnView和EnView分别对应一个XIB文件,在CnView的XIB文件中,主要采用XML格式描述了Button和Label控件的属性(这里不考虑View自己的背景等属性),有个Button和Label,以及Button和Label的位置、大小等。EnView的XIB文件相似。

2. ViewController

       每一个View对应有个视图控制器(多个View能够采用同一个视图控制器,后边再说),能够看作MVC中的C(尽管严格意义上不是),好比:CnView界面点击按钮以后的响应动做是由ViewController来实现的。

3. XIB和ViewController之间的关系

     XIB是表现,ViewController一方面响应XIB上的操做(好比点击、滑动等),同时也控制XIB的显示。

4. File's Owner

     重点就是这里了,View和ViewController之间的对应关系,须要一个桥梁来进行链接的(即,对于一个视图,他如何知道本身的界面的操做应该由谁来响应),这个桥梁就是File's Owner。

     选中某个XIB的File's Owner,在Inspector中能够看到属性:File Name和Custom Class,该File's Owner就是用来绑定File Name中的xib文件和Custom Class中的ViewController的,在作了这个绑定以后,按住control键,拖动File's Owner到xib中的某个控件的时候,就是Custom Class中定义的IBOutlet元素与xib中元素进行链接的过程,一样,拖动"xib中的控件的动做"到File's Owner的时候,就是将xib中该动做的响应与Custom Class中某个IBAction进行链接的过程。

     所以,在存在多个xib文件的状况下,即:有多个View,那么每一个View能够采用不一样的ViewController,也能够所有采用相同的一个ViewController,经过File's Owner进行关联便可。

     其实,File's Owner就是Custom Class类型的对象,而xib中的其余元素都是该对象的成员变量,可是须要手动来关联Custom Class中的成员变量与xib中对象之间的关系。

5. First Responder

     View中每次只会有一个对象与用户进行交互,那么当前交互的对象即为First Responder。好比点击文本框,那么此时文本框就是First Responder。
  
在iPhone开发中,输出口和操做是比较重要的概念,在编辑iPhone界面的时候,经过可视化工具,处理界面相关控件的布局,但并不能经过可视化工具实现对控件的修改和控件发出的操做,要完成这两件事情就要分别经过输出口和操做来实现。
输出口

输出口就是咱们须要在代码里操做的控件。在nib文件中,经过可视化操做来定义一个控件,若是这个控件须要在代码中被修改,那么就要定义一个输出口指向这个控件,而后经过输出口来修改这个控件,输出口也就是一个指针指向了nib中的控件对象。输出口使用关键字IBOutlet声明,相似下面一行代码定义一个标签输出口:

@property (nonatomic, retain) IBOutlet UILabel* myLabel;

咱们但愿定义一个标签,在代码里须要更改这个标签的内容,这样就要象上面那样经过关键字IBOutlet声明为输出口,而后在Interface Builder中把这个输出口和相应的标签关联,就能够在代码里经过这个输出口操做标签了。
操做

操做就是触发一个控件后这个控件执行的方法。咱们要添加一个按钮,当你想在点击这个按钮的时候改变屏幕的颜色,这时就须要定义一个操做改变屏幕颜色,而后在nib文件中把操做跟这个按钮关联起来,当你点击这个按钮的时候就会调用关联的操做方法了。一般状况下操做方法的声明以下:

- (IBAction)doSomething:(id)sender;

关键字IBAction告诉Inerface Buileder此方法是一个操做方法,能够被某个控件触发。方法名doSomething能够为任意的你本身定义。返回值必需是IBAction,其实它相似于void返回值不返回值。操做方法接受一个参数(id)sender,控件触发了操做后就把本身传给sender,这样在操做方法里就能够根据sender获得触发控件的信息。
相关文章
相关标签/搜索