我不知道他们在您链接到的帖子中指的是什么,因为它不正确。您不需要@IBOutlet 来专门处理任何事情。它不授予按钮任何特殊权力,它只是一个方便的指针,指向您可以使用的对象。
如果你想调用对象的方法,当然需要一个指向对象的指针,但是@IBAction 的sender 属性对于IBAction 的代码同样适用。
您必须确保sender 是正确的类型。
例如:
@IBAction func buttonPressed(sender: UIButton) {
sender.setTitle("New Title", forState: .Normal)
}
这样可以正常工作并更改点击的按钮。是否有@IBOutlet 指向它并不重要。 sender 变量就是您所需要的。
在某些情况下,您需要为 sender 使用 AnyObject 类型,在这种情况下,您需要先检查类型:
@IBAction func buttonPressed(sender: AnyObject) {
if let button = sender as? UIButton {
button.setTitle("New Title", forState: .Normal)
}
}
现在,如果您想更改其他按钮的标题,@IBOutlet 可以更轻松。
@IBOutlet weak var someOtherButton: UIButton!
@IBAction func buttonPressed(sender: UIButton) {
someOtherButton.setTitle("New Title", forState: .Normal)
}
但同样,@IBOutlet 不是必需的(推荐)。要显示@IBOutlet 没有任何特殊权力,您可以在 Interface Builder 中的按钮上设置 tag 值(例如 100)并使用如下代码:
@IBAction func buttonPressed(sender: AnyObject) {
if let button = view.viewWithTag(100) as? UIButton {
button.setTitle("New Title", forState: .Normal)
}
}
我在这里使用的 100 数字是任意的,可以是任何数字,只要您只将数字用于视图中的一项即可。