使用选择器作为变量与addTarget一起使用

时间:2014-11-07 11:09:26

标签: swift

我在Swift中遇到选择器问题。我有以下几行代码:

let actionTarget="onPress:"
button.addTarget(self, action: Selector(actionTarget), forControlEvents: .TouchUpInside)

但这会产生错误:

! Could not find member 'TouchUpInside'

但是如果我尝试这个错误就会消失:

button.addTarget(self, action "onPress:", forControlEvents: .TouchUpInside)

所以我假设它不是导致我出问题的.TouchUpInside,但缺少一个导致我出问题的字符串文字。

我也尝试过:

let actionTarget="onPress:" as Selector
button.addTarget(self, action: actionTarget, forControlEvents: .TouchUpInside)

但那也没有用。

如何使用不是字符串文字的Selector提供操作,而是存储在变量中?

1 个答案:

答案 0 :(得分:2)

button.addTarget(self, action: "onPress:", forControlEvents: .TouchUpInside)

这一个是正确的 - 你不需要像Selector()那样做任何特殊的事情来使用选择器,只需使用字符串即可。

如果您的选择器存储在变量中,请使用:

let selector = "onPress:"
button.addTarget(self, action: Selector(selector), forControlEvents: .TouchUpInside)

这里as不正确的原因是因为它用于从超类转换为子类。例如,let p:UIView = UIButton(...)p as UIButton可以正常工作,因为p实际上是UIButton个实例。在这种情况下,使用Selector( ... )调用相应的Selector构造函数并从String中实例化一个新的Selector。