[转]ios 开发file's owner以及outlet与连线的理解
转载地址:http://www.cocoachina.com/bbs/simple/?t108822.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得到触发控件的信息。
[转]ios 开发file's owner以及outlet与连线的理解的更多相关文章
- file's owner以及outlet与连线的理解
转自:http://www.cnblogs.com/martin1009/archive/2012/06/01/2531028.html xib文件本身可以看做是一个xml,app启动的时候会根据xm ...
- iOS开发UI篇—控制器的创建
iOS开发UI篇—控制器的创建 说明:控制器有三种创建方式,下面一一进行说明. 一.第一种创建方式(使用代码直接创建) 1.创建一个空的IOS项目. 2.为项目添加一个控制器类. 3.直接在代理方法中 ...
- iOS开发-代理模式
代理模式有的时候也被称之为委托模式,但是实际上两者是有分别的,代理模式为另一个对象提供一个替身或占位符访问这个对象,代理对象和控制访问对象属于同一类,委托对象和对象不一定属于同一类.两者都可以控制类的 ...
- 【iOS】Xib的使用与File'Owner总结
一.XIB的适用范围 xib(也叫Nib)与storyboard一样是用来描写叙述界面的. storyboard描写叙述的是比較大型的,大范围.适合描写叙述界面跳转等. 二.XIB的使用 Xib是小范 ...
- 【IOS开发笔记02】学生管理系统
端到端的机会 虽然现在身处大公司,但是因为是内部创业团队,产品.native.前端.服务器端全部坐在一起开发,大家很容易做零距离交流,也因为最近内部有一个前端要转岗过来,于是手里的前端任务好像可以抛一 ...
- IOS开发中UI编写方式——code vs. xib vs.StoryBoard
最近接触了几个刚入门的iOS学习者,他们之中存在一个普遍和困惑和疑问,就是应该如何制作UI界面.iOS应用是非常重视用户体验的,可以说绝大多数的应用成功与否与交互设计以及UI是否漂亮易用有着非常大的关 ...
- 从零开始学ios开发(四):IOS控件(1),Image View、Text Field、Keyboard
长话短说,谢谢大家的关注,这篇写了好长时间,下面继续学习ios.我将用2到3篇的篇幅来学习iphone上的一些常用控件,包括Image View.Text Field.Keyboard.Slider等 ...
- iOS开发:使用Tab Bar切换视图
iOS开发:使用Tab Bar切换视图 上一篇文章提到了多视图程序中各个视图之间的切换,用的Tool Bar,说白了还是根据触发事件使用代码改变Root View Controller中的Conten ...
- iOS开发通过代码方式使用AutoLayout (NSLayoutConstraint + Masonry)
iOS开发通过代码方式使用AutoLayout (NSLayoutConstraint + Masonry) 随着iPhone6/6+设备的上市,如何让手头上的APP适配多种机型多种屏幕尺寸变得尤为迫 ...
随机推荐
- 提高你的C#程序编码质量
摘自陆敏技之<编写高质量代码:改善C#程序的157个建议>,编写C#程序代码时应考虑代码效率.安全和美观,可参考下述建议.想成为一名合格的搬砖工,牢记吧!! 基本语言要素 1.正确操作字符 ...
- Java基础之线程——管理线程同步方法(BankOperation2)
控制台程序. 当两个或多个线程共享同一资源时,例如文件或内存块,就需要采取措施,确保其中的一个线程不会修改另一个线程正在使用的资源.当其中的一个线程更新文件中的某个记录,同时另一个线程正在检索这个记录 ...
- List, Set, Map是否继承自Collection接口?
List, Set, Map是否继承自Collection接口? 答:List,Set是Map不是
- nginx的基本配置和虚拟主机的配置
在Nginx配置文件(nginx.conf)中,一个最简化的虚拟主机配置代码如下: 跟Apache -样,Nginx也可以配置多种类型的虚拟圭机:一是基于IP的虚拟主机,二是基于域名的虚拟主机,三是基 ...
- 配置文件App.config的使用以及Readonly与Const的对比
以前我们学习的时候都把连接数据库的连接字符串写在一个类中,因为我们的数据库都在自己电脑上.如果更换数据库地址,需要更改这个类,然后重新编译才可以连接到数据库.现在我们需要将连接字符串当道一个文件中,然 ...
- HDU 5000 Clone(离散数学+DP)(2014 ACM/ICPC Asia Regional Anshan Online)
Problem Description After eating food from Chernobyl, DRD got a super power: he could clone himself ...
- CCF真题之模板生成系统
问题描述 成成最近在搭建一个网站,其中一些页面的部分内容来自数据库中不同的数据记录,但是页面的基本结构是相同的.例如,对于展示用户信息的页面,当用户为 Tom 时,网页的源代码是 而当用户为 Jerr ...
- paper 37 : WINCE的BIB文件解析
WINCE的BIB文件解析 BIB的全称为Binary Image Builder,在Wince编译过程中的最后MakeImage阶段会用到BIB文件,BIB文件的作用是指示构建系统如何构建二进制映像 ...
- mongodb的js操作
在包含url的test库中运行test.js mongo url:port/test test.js
- uml定义的使用的关系
uml定义的关系主要有六种:依赖.类属.关联.实现.聚合和组合.下面对其定义和表示方法逐一说明. 依赖 (Dependency):元素A的变化会影响元素B,但反之不成立,那么B和A的关系是依赖关系,B ...