IBOutlet与IBAction的理解

前言:

Apple针对于使用StoaryBoard技术进行界面开发时提出了两个名词,即为“IBOutlet与IBAction”。初学者可能对这两个概念稍有不理解。对于传统的开发而言,如Android和Swing等,均是实例化某个控件,然后设置其动作监听,重写其点击方法等来完成事件逻辑的编写。传统上UIKit的开发也可以使用类似“动作监听”(addTarget())的方法机制来完成业务需求,然而Apple对于初学者而言力推的方式是采用“IBOutlet与IBAction”。故本文就浅显地讲解一下它们的理解。

IBOutlet:

全称“Interface Builder Outlet”,翻译过来就是“界面构建输出口”,官方翻译为“插座变量”。
有Android或类似平台开发基础的读者请看一下代码:

Button button = (Button) findViewById(R.id.button);

Button button = new Button(this);

在上面的代码里面,我们必须new或者强制转型才能拿到一个控件的实例,然后通过该实例设置其属性。否则在开发系统里面,我们拿不到该控件对象的任何属性。但当我们通过设置一个控件的IBOutlet,我们就能在该ViewController内任何地方调用该控件的属性。

例如,图中有两处红圈所指的地方,在右面我们创建这个对象,如果没有创建左侧这个IBOutlet,我们在代码里面是获取不到Label这个控件的属性的。但有了左侧这个IBOuelt,我们就能在这个ViewController甚至其他ViewController拿到这个控件的属性。

IBAction:

全称“Interface Builder Action”,翻译过来就是“界面构建动作”。这个概念就是上面提到的“动作监听”。我们通过StaoryBoard创建了一个控件的IBAction,就相当于创建了一个控件的“动作监听”,可以直接在其方法里面完成我们的业务逻辑。。如下所示:

import UIKit

class ViewController: UIViewController {

    @IBOutlet weak var mLabel: UILabel!
    
    @IBAction func buttonListener(_ sender: Any) {
        // Do something here.
    }
    
    override func viewDidLoad() {
        super.viewDidLoad()
        // Do any additional setup after loading the view.
    }


}

需要补充的是,这里的“动作监听”是比较笼统的概念,实际上我们可以设置很丰富的监听行为,如按下,抬起,长按等等

总结:

上文是对与初学者而言用来学习理解的。实际上Apple也有官方解释如下:
IBOuelet:
输出口是使用关键字IBOutlet声明的实例变量。
就编译器而言,IBOutlet并未执行任何操作。它的唯一作用是告诉Interface Builder,此实例变量将被连接到StoryBoard中的对象。你创建的任何需要连接到StoryBoard文件中的对象的实例变量都必须以IBOutlet关键字开头。打开 Interface Builder时,它会在项目头文件中扫描此关键字,你可以根据这些(且只能根据这些)变量将代码连接到StoryBoard 。
IBAction:
操作控制器类中的方法。它们也是通过特殊关键字IBAction声明的,该关键字告诉Interface Builder,此方法是一个操作,且可以被某个控件触发。
官方解释比较生硬拗口,但准确,笔者解释虽然生动形象,但可能准确性方面有些许欠缺,请读者们自行凿定。

你可能感兴趣的:(iOS,ios,swift,xcode)