我在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提供操作,而是存储在变量中?
答案 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。