我对Swift编程相对较新,只是从this article on Stack Overflow学到了我无法通过发送者'来改变UIButton文字。 @IBAction代码中的参数,但必须从按钮设置@IBOutlet并使用outlet变量上的方法。这有多宽泛的规则?有什么方法可以适用于发件人'论证,哪些不是?
答案 0 :(得分:2)
我不知道他们在你发布的帖子中指的是什么,因为它不正确。对于任何具体的事情,你都不需要@IBOutlet
。它没有赋予按钮任何特殊的权力,它只是一个指向你可以使用的对象的方便指针。
如果你想调用它的方法,你当然需要一个指向该对象的指针,但sender
的{{1}}属性对于@IBAction
同样有用。的代码。
您必须确保IBAction
是正确的类型。
例如:
sender
这样可以正常工作并更改按下的按钮。如果@IBAction func buttonPressed(sender: UIButton) {
sender.setTitle("New Title", forState: .Normal)
}
在任何地方指向它并不重要。只需@IBOutlet
变量即可。
在某些情况下,您希望对sender
使用AnyObject
类型,在这种情况下,您需要先检查类型:
sender
现在,如果您想要更改其他按钮的标题,那么@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
没有任何特殊权限,您可以在Interface Builder中的按钮上设置@IBOutlet
值(例如100)并使用以下代码:
tag
此处使用的100号码是任意的,只要您在视图中仅使用一个项目的数字,就可以是任意数字。
答案 1 :(得分:0)
@IBAction func buttonClicked(sender : AnyObject) {
println("Button was clicked", sender)
}
此处发件人是指您的按钮的参考。您可以使用sender.backgroundColor
等发件人在点击时执行不同的按钮。
希望这会有所帮助:)
答案 2 :(得分:0)
您提到的发件人论点是目标行动机制的一部分。
sender参数通常标识发送操作消息的控件(尽管它可以是由实际发件人替换的另一个对象)。这背后的想法类似于明信片上的回邮地址。如果需要,目标可以查询发件人以获取更多信息。如果实际发送对象将另一个对象替换为发送方,则应以相同方式处理该对象。例如,假设您有一个文本字段,当用户输入文本时,将在目标中调用操作方法nameEntered:
由于发件人可能会被替换,因此无法保证有人可以在参数中使用其他发件人手动调用,而如果您通过IBOutlet在您的班级中拥有对按钮的引用,则有时可能会更明智地将它用于您希望调用的任何方法,因为您确定它指的是按钮。
但是,如果您确定该方法仅与正确的发件人链接,则可以调用任何方法。
问题不在于“我可以采取什么行动”,而是“我真的确定发送者确实是相关按钮”