视图控制器与标签传递nib的输出口outlet
在Xcode 4.3.2中,我们使用interface Builder创建一个视图界面,我们选择的是IOS中的Application的single ViewApplication视图,此模版会帮我们自动构建好需要的文件。包含两个类:AppDelegate和ViewController和xib文件即图形界面设计。
ViewController文件是继承的UIViewController基类,UIViewController是ViewController的父类,是一个通用控制器,也是UIKit的一部分。
当我们在xib文件中添加标签控件的时候,可以通过interface Builder创建三个元素,也可以通过修改代码带达到我们想要的效果,这里就有图形和代码元素的交互。
因此,控制器类可以使用一种特殊的实例变量来引用xib中的对象,这个变量就是输出口outlet。可以把输出口看成是指向xib中对象的指针。
例如,你在IB(interface Builder缩写)中创建一个文本标签,希望在代码中修改该标签文本。可以通过声明一个输出口,并将其指向此标签对象。怎么添加声明呢,我们需要在ViewController.h中进行声明:IBoutlet UILabel *myLabel;上述代码,我们引用了outlet输出口,通过输出口来实现声明并通过代码修改代码的效果。
也可以设置xib文件中的界面对象触发控制器类中的特殊方法,这些特殊方法称为操作方法。可以告诉IB,当用户放手按键时,应当调用代码中的特定操作方法。
输出口是使用关键字IBOutlet声明的实例变量。控制器头文件的输出口声明应如下所示:
IBOutlet UIButton *myButton;
而IBOutlet关键字的定义为:
#ifndef IBOutlet
#define IBOutlet
#endif
通过上述定义,我们可以看到输出口没有进行任何操作,唯一作用就是告诉IB此实例变量将被连接到xib中的对象。你创建的任何需要链接到xib文件中的对象的实例变量都必须以IBOutlet关键字开头。打开IB时,它会在项目头文件中扫描此关键字,并允许你根据这些变量将代码连接到xib中,那是怎么通过IB在输出口和用户界面xib之间建立连接的呢?
我们先再提一个概念:操作。操作是控制器类中的方法。他们通过特殊关键字:IBAction声明。该关键字告诉IB此方法是一个操作,且可以被某个控件出发。
声明如下:-(IBAction)doSomething:(id)sender;
该方法的实际名称是没有限制的,同OC一致。但返回值类型必须是IBAction,与声明void返回值相同。这是声明操作方法不返回任何值的另一种方法。(注明:void与IBAction同样效果实现无返回值),并接受了一个参数,该参数通常被声明为id类型,名称为sender。出发操作的空间将使用sender参数引用其自身。如果你的操作方法将在按下按钮时被调用,则sender参数将包含对该特定按钮的引用。