首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何在@UIAction代码Swift中正确使用'sender‘参数?

如何在@UIAction代码Swift中正确使用'sender‘参数?
EN

Stack Overflow用户
提问于 2016-04-19 01:42:32
回答 3查看 2K关注 0票数 1

我对Swift编程比较陌生,刚从this article on Stack Overflow学到我不能通过@IBAction代码中的‘UIButton’参数更改发送文本,但必须从按钮设置一个@IBOutlet并在outlet变量上使用方法。这条规则有多宽泛?哪些方法可以应用于'sender‘参数,哪些不可以?

EN

回答 3

Stack Overflow用户

发布于 2016-04-19 02:30:06

我不知道在你链接的那篇文章里他们指的是什么,因为它不正确。对于任何特定的事情,您都不需要@IBOutlet。它不会赋予按钮任何特殊的功能,它只是一个指向您可以使用的对象的方便指针。

当然,如果要调用对象的方法,则需要指向该对象的指针,但是@IBActionsender属性同样适用于该IBAction的代码。

您必须确保sender是正确的类型。

例如:

代码语言:javascript
复制
@IBAction func buttonPressed(sender: UIButton) {
    sender.setTitle("New Title", forState: .Normal)
}

这将很好地工作,并更改所点击的按钮。如果有一个@IBOutlet指向它的任何地方都没有关系。sender变量就是您所需要的。

在某些情况下,您需要对sender使用AnyObject类型,在这种情况下,您需要首先检查该类型:

代码语言:javascript
复制
@IBAction func buttonPressed(sender: AnyObject) {
    if let button = sender as? UIButton {
        button.setTitle("New Title", forState: .Normal)
    }
}

现在,如果您想要更改另一个按钮的标题,那么@IBOutlet可以使更改变得更容易。

代码语言:javascript
复制
@IBOutlet weak var someOtherButton: UIButton!

@IBAction func buttonPressed(sender: UIButton) {
    someOtherButton.setTitle("New Title", forState: .Normal)
}

但同样,@IBOutlet也不是必需的(建议使用)。要显示@IBOutlet没有任何特殊功能,您可以在界面生成器中的按钮上设置一个tag值(例如100),并使用如下代码:

代码语言:javascript
复制
@IBAction func buttonPressed(sender: AnyObject) {
    if let button = view.viewWithTag(100) as? UIButton {
        button.setTitle("New Title", forState: .Normal)
    }
}

我在这里使用的100数字是任意的,可以是任何数字,只要您在视图中只对一项使用该数字。

票数 2
EN

Stack Overflow用户

发布于 2016-04-19 01:59:15

代码语言:javascript
复制
@IBAction func buttonClicked(sender : AnyObject) {
println("Button was clicked", sender)
}

这里的sender指的是你的按钮的引用。你可以使用sender.backgroundColor等发送器在点击按钮时执行不同的操作。

希望这能有所帮助:)

票数 0
EN

Stack Overflow用户

发布于 2016-04-19 02:09:12

您提到的发送者参数是Target-Action机制的一部分。

发送者参数通常标识发送动作消息的控件(尽管它可以是由实际发送者替换的另一个对象)。这背后的想法类似于明信片上的回信地址。如果需要,目标可以向发送者查询更多信息。如果实际的发送对象替换了另一个对象作为发送者,则应该以相同的方式处理该对象。例如,假设您有一个文本字段,当用户输入文本时,将在目标中调用操作方法nameEntered::

因为发送者可以被替换,所以不能保证如果手动调用参数,某人可以在参数中使用另一个发送者,而如果您通过IBOutlet在类中拥有对按钮的引用,那么有时在您希望调用的任何方法中使用它可能更明智,因为您确定它引用了按钮。

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

问题不是“我可以调用什么操作”,而是“我真的确定发送者真的是相关按钮吗?”

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/36700818

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档