你如何在Swift中使用Interface Builder?

14

当将Swift代码与Storyboard相连接时,如何添加IBActionIBOutlet标签?


1
同样的方式,在类块内按住Ctrl并拖动,然后选择是输出口还是操作。 - Calin Chitu
@CalinChitu:你能详细说明一下吗?我通常是将事物从IB连接到代码。 - Jason Moore
是的,从IB到代码,和以前一样。只是界面不再存在了,所以你需要将其拖到类内部的代码中。而且你必须选择它是一个outlet还是action。 - Calin Chitu
5个回答

31

为变量和函数添加IBActionIBOutlet属性,以便它们可以在界面构建器中可见。

class ViewController: UIViewController {

    @IBOutlet var label: UILabel?

    @IBAction func doTap(x:UIButton) {
        println("Tapped: \(x)")
    }
}

3
如果您正在开发自己的控件,也可以使用@IBDesignable@IBInspectable。 :) - akashivskyy
True。Swift书中也提到了这两个新属性,但我想在NDA解除之前我们必须等待更多关于它们的信息。 - Jason Moore
实际上我们可以公开讨论这个链接:http://oleb.net/blog/2014/06/apple-lifted-beta-nda/ - volkersfreunde
我做得没错,这是Xcode的一个bug。我试图在一个现有项目中完成它,但当我打开该项目时,它会给我一个“出了些问题,没有更多信息”的提示。当我创建一个全新的项目时,它就可以正常工作了。 - Alcanzar
难道不应该是 @IBOutlet weak var label: UILabel! 吗? - TheTiger
显示剩余2条评论

4
以下代码展示了Swift中的IBOutlet和IBAction格式:

以下代码展示了Swift中的IBOutlet和IBAction格式:

class MyViewController: UIViewController {

  @IBOutlet weak var btnSomeButton: UIButton?
  @IBOutlet weak var lblLabelItem: UILabel?

  @IBAction func btnSomeButtonClicked(sender: UIButton) {
    ...
  }
}

你可以像在 Objective-C 中一样绑定它们。


3
只需使用旧的ctrl +拖动技术,这在Xcode5中很受欢迎,一切都可以正常工作。

这对我帮助很大。+1 - Jeyhun Rahimov
3
如果控制拖动技术无法使用,请确保在IB中将类设置为与您的自定义Swift视图控制器类的名称匹配。 - avance

3

我更倾向于Jayprakash的答案,而不是得到了更多赞的第一个答案。唯一需要纠正的是将IBOutlets标记为隐式解包的!。在Swift的最新版本中,与IB交互的方式发生了几个变化,因此第一个答案不再正确。在Swift中,IBOutlets不再具有任何隐式行为或魔法——它们只是用于IB的注释。截至本回答日期,以下代码是正确的:

// How to specify an the equivalent of IBOutletCollection in Swift
@IBOutlet var fields: [UITextField]!
// How to specify a standard IBOutlet
@IBOutlet weak var button: UIButton!
// How to specify an IBAction
@IBAction func buttonWasPressed(sender: UIButton) { ... } 

1
在创建项目时,您应该已经选择了故事板,这样您就可以直接在故事板中添加IBOutlet

以下代码为您说明如何将IBOutlet添加到UILabel中。

class ViewController: UIViewController {

    @IBOutlet var label : UILabel

}

IBOutlet 具有非可选类型 UIButton。 - quantumpotato

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接