转自:http://www.cnblogs.com/martin1009/archive/2012/06/01/2531028.html

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得到触发控件的信息。

file's owner以及outlet与连线的理解的更多相关文章

  1. [转]ios 开发file's owner以及outlet与连线的理解

    转载地址:http://www.cocoachina.com/bbs/simple/?t108822.html xib文件本身可以看做是一个xml,app启动的时候会根据xml构造xib对应的界面及其 ...

  2. 【iOS】Xib的使用与File'Owner总结

    一.XIB的适用范围 xib(也叫Nib)与storyboard一样是用来描写叙述界面的. storyboard描写叙述的是比較大型的,大范围.适合描写叙述界面跳转等. 二.XIB的使用 Xib是小范 ...

  3. nib 加载过程分析以及对File’s Owner的理解

    nib loading的过程,这个是app文档里面有说到资源编程指南 1.  It loads the contents of the nib file and any referenced reso ...

  4. The File's Owner

    The File Owner is an instantiated, runtime object that owns the contents of your nib and its outlets ...

  5. 在使用完全拷贝过来的类文件(带xib文件)时,要及时修改 File's Owner

  6. iOS开发UI篇—控制器的创建

    iOS开发UI篇—控制器的创建 说明:控制器有三种创建方式,下面一一进行说明. 一.第一种创建方式(使用代码直接创建) 1.创建一个空的IOS项目. 2.为项目添加一个控制器类. 3.直接在代理方法中 ...

  7. IOS UI-控制器的创建和控制器的View的创建

    一.控制器的创建和控制器的View的创建 说明:控制器有三种创建方式,下面一一进行说明. 一.第一种创建方式(使用代码直接创建) 1.创建一个空的IOS项目. 2.为项目添加一个控制器类. 3.直接在 ...

  8. iOS - Xib

    前言 xib 文件可以被 Xcode 编译成 nib 文件,xib 文件本质上是一个 xml 文件,而 nib 文件就是编译后的二进制文件,该文件将视图等控件对象封装了起来,而在程序运行起来后,这些对 ...

  9. 集合视图控制器(CollectionViewController) 、 标签控制器(TabBarController) 、 高级控件介绍

    1 创建集合视图,设置相关属性以满足要求 1.1 问题 集合视图控制器UIConllectionViewController是一个展示大量数据的控制器,系统默认管理着一个集合视图UICollectio ...

随机推荐

  1. CentOS上安装分布式文件系统FastDFS & 配置和问题解决

    原文:https://my.oschina.net/wangmengjun/blog/1142982 什么是FastDFS? FastDFS是一个开源的分布式文件系统,她对文件进行管理,功能包括:文件 ...

  2. Netty游戏服务器二

    上节我们写个server主类,那么发现什么事情都干不了,是的,我们还没有做任何的业务处理. 接着我们开始写处理客户端连接,发送接收数据的类ServerHandler. public class Ser ...

  3. Windows7下安装与破解IntelliJ IDEA2017(转载)

    IDEA 全称 IntelliJ IDEA,是Java语言开发的集成环境,IntelliJ在业界被公认为最好的java开发工具之一,尤其在智能代码助手.代码自动提示.重构.J2EE支持.各类版本工具( ...

  4. IngressController的session stick问题

    周末爬坑,IngressController恢复因为镜像下载和版本问题折腾一下午,晚上终于折腾出个眉目. 首先,在Kubernetes的service中是可以设置Session Affinity的.例 ...

  5. github之无命令可视化界面操作——GitHub DeskTop

    Git是Linuxs之父Lunus用C语言写的一个非常好用的分布式版本控制系统. GitHub可以给我们提供免费的代码仓库,并用Git可以在上面提交代码并进行版本控制.使用Git一般要安装Git ,并 ...

  6. Shell学习:read的选项及用法

    转摘: http://kb.cnblogs.com/a/2255702/ 1. Read的一些选项 Read可以带有-a, -d, -e, -n, -p, -r, -t, 和 -s八个选项. -a : ...

  7. python 将编码转为汉字

    print '\u57fa\u7840\u5316\u5de5\u4e1a'.decode('unicode-escape') print urllib.unquote("%C0%FA%CA ...

  8. AWK 怎么读取标准输入(STDIN)

    在 awk 系列中,我们将会看到几个例子,你可以筛选其他命令的输出代替从一个文件读取输入作为 awk 的输入.我们首先从使用 dir 命令开始,它类似于 ls 命令. 在第一个例子下面,我们使用 di ...

  9. 给ubuntu设置静态ip —— How to set static IP Address in Ubuntu Server 16.04

    原文: http://www.configserverfirewall.com/ubuntu-linux/ubuntu-set-static-ip-address/ ----------------- ...

  10. 爪哇国新游记之七----使用ArrayList统计水果出现次数

    之前学习制作了DArray,了解ArrayList就容易了. /** * 用于存储水果名及数量 * */ public class Fruit{ private String name; public ...