如何正确使用发件人' @UIAction代码中的参数Swift?

时间:2016-04-18 17:42:32

标签: ios swift uibutton

我对Swift编程相对较新,只是从this article on Stack Overflow学到了我无法通过发送者'来改变UIButton文字。 @IBAction代码中的参数,但必须从按钮设置@IBOutlet并使用outlet变量上的方法。这有多宽泛的规则?有什么方法可以适用于发件人'论证,哪些不是?

3 个答案:

答案 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在您的班级中拥有对按钮的引用,则有时可能会更明智地将它用于您希望调用的任何方法,因为您确定它指的是按钮。

但是,如果您确定该方法仅与正确的发件人链接,则可以调用任何方法。

问题不在于“我可以采取什么行动”,而是“我真的确定发送者确实是相关按钮”