在Swift中更正UIButton操作消息的函数签名

时间:2015-08-28 22:27:46

标签: ios objective-c uibutton

在此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文档中搜索有关操作消息的其他签名不会产生任何结果。我们检查了UIButtonUIControl类。

我们用Google搜索了UIButton action messageUIControl selector actionUIButton eventsUIButton action function signature以及各种变体,但没有。

我们如何转换他的Obj-C代码?或者我们在哪里可以找到可用于处理UIButton事件的所有可能操作?

1 个答案:

答案 0 :(得分:4)

您需要在设置按钮时更改使用的选择器:

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

func buttonTouchUp(sender: UIButton!, 
  event: UIEvent) {

(动作签名遵循Cbjective-C语法,您只需列出冒号后面的参数。)