在此SO question中,用户feihu
建议使用不同的操作作为TouchUpInside
事件的目标。
以下是相关部分:
[btn addTarget:self action:@selector(btnTouchUp:withEvent:) forControlEvents:UIControlEventTouchUpInside];
(void)btnTouchUp:(UIButton *)sender withEvent:(UIEvent *)event {
...
}
将此代码转换为Swift一直令人抓狂。
我们尝试过:
button.addTarget(self, action: "buttonTouchUp:", forControlEvents: .TouchUpInside)
func buttonTouchUp(sender: AnyObject, event: UIEvent) {
...
}
和
button.addTarget(self, action: "buttonTouchUp:", forControlEvents: .TouchUpInside)
func buttonTouchUp(sender: UIButton!, event: UIEvent) {
...
}
标准操作消息以外的任何内容(以sender: UIButton!
为唯一参数)会生成一个异常,说明发送了无法识别的选择器。
在Apple文档中搜索有关操作消息的其他签名不会产生任何结果。我们检查了UIButton
和UIControl
类。
我们用Google搜索了UIButton action message
,UIControl selector action
,UIButton events
,UIButton action function signature
以及各种变体,但没有。
我们如何转换他的Obj-C代码?或者我们在哪里可以找到可用于处理UIButton
事件的所有可能操作?
答案 0 :(得分:4)
您需要在设置按钮时更改使用的选择器:
button.addTarget(self, action: "buttonTouchUp:event:",
forControlEvents: .TouchUpInside)
func buttonTouchUp(sender: UIButton!,
event: UIEvent) {
(动作签名遵循Cbjective-C语法,您只需列出冒号后面的参数。)