视图控制器(ViewController.swift)类中的代码与storyboard文件中的对象(比如按钮和标签等)交互。
控制器类可以通过一种名为输出接口(outlet)的特殊属性来引用storyboard或nib文件中的对象,可以把输出接口看成是指向用户界面中对象的指针。
反过来,也可对storyboard或nib文件中的界面对象进行设置,以触发控制器类中的某些特殊方法。这些特殊方法称为操作方法(Action),或者简称为操作。例如可以在Interface Builder中进行设置,用户点击一个按钮时就调用代码中的某个相关操作方法。
下面用一个例子来说明具体的实现方式:
1.添加按钮和操作方法
在主视图中添加一个button控件,选中它,按住Ctrl键,左键点击拖拽至ViewController.swift中的ViewController控制器的swift代码中,直到出现如下弹窗:
弹窗中的Connection分别为Outlet(输出接口)、Action(操作方法)、Outlet Collection(输出接口集合),这里选择Action创建一个操作方法。Name中输入操作方法的名称,Type下面有两个下拉菜单,保留它们的默认值即可。Event下拉菜单中指定什么时候调用这个方法。默认值为Touch Up Inside仅在用户的手指离开屏幕(且用户的手指在离开屏幕之前位于按钮内部)时触发相应的操作方法。
添加按钮完成之后显示如下:
2.添加标签和输出接口,操作与上一步类似,Connect选择Outlet.
说明:(1)输出接口是一个很常见的属性,用修饰符@IBOutlet来标记,指向用户界面中的按钮;
(2)UILabel后面加了!的原因:在视图控制器的初始化函数运行之前,从storyboard加载视图控制器时,输出接口属性的值会根据storyboard中保存的信息进行设置,这样,输出接口的属性值必须是可选值,除非特意为它们赋予无意义的临时值(这样并不可取)。至于为什么使用!不用?是因为这样不需要在之后视图控制器代码用到可选值时特意去对它拆包,使用!要确保设置好,不让可选值变成nil。
(3)weak指示符的意思是这个属性对标签不是强引用类型,当对象不再被强引用类型所关联的时候,就会立即自动释放内存。设置属性为弱引用就能在不需要这个视图时将它从用户界面上移除并释放,完成释放后,属性的引用将被设置为空值nil。
3.编写操作方法
目标:点击按钮时,使用这些操作方法和输出接口来设置标签的显示文本。
打开ViewController.swift文件,并在编辑器中打开它,找到ButtonPressed()方法并完善:
第一行的sender.title参数获取被点击的按钮的标题,由于按钮在不同的状态下有不同的标题,因此使用UIControlState.selected参数表明我们需要获取的是按钮在被选择状态时的标题。获取控件标题时,通常使用这种状态。方法中传递的参数是.selected而不是UIControlState.selected是因为swift已经知道了参数一定是UIControlState枚举中的某个值,所以我们省略掉枚举名称。
运行结果:
点击left按钮:
点击right按钮: