一尘不染

iOS无法识别的选择器已发送到Swift中的实例

swift

我在尝试让用户按下UIButton时遇到问题。我不断收到错误消息:无法识别的选择器已发送到实例

override func viewDidLoad() {
    super.viewDidLoad()

    button.addTarget(self, action: "buttonClick", forControlEvents: UIControlEvents.TouchUpInside)
    button.setTitle("Print", forState: UIControlState.Normal)
    button.font = UIFont(name: "Avenir Next", size: 14)
    button.backgroundColor = UIColor.lightGrayColor()
    self.view.addSubview(button)
}

func buttonClick(Sender: UIButton!)
{
    myLabelInfo.text = "Hello"
}

对于Swift方法,例如funcbuttonClick(Sender:UIButton)传递给addTarget选择器方法的正确字符串是什么?是“ buttonClick”,“ buttonClick:”,“
buttonClickSender:”还是其他?


阅读 230

收藏
2020-07-07

共1个答案

一尘不染

您正在对该操作使用无效的方法签名。您正在提供buttonClick,但该方法有一个参数,因此签名应为buttonClick:

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

有关如何设置选择器格式的更多信息,您可以参考下面链接中所接受的答案。这篇文章中使用的代码可能是Objective-C,但其所有课程也可以在这里应用。

另外请注意,如果您将此代码用作Selector("buttonClicked:")操作,则此代码也将有效,但不必这样做,因为可以将字符串文字隐式转换为Selector类型。

引用Swift与Cocoa和Objective-C一起使用

一个Objective-C选择器是一种引用Objective-C方法名称的类型。在Swift中,Objective-
C选择器由Selector结构表示。您可以使用字符串文字构造选择器,例如let mySelector:Selector =“
tappedButton:”。由于字符串文字可以自动转换为选择器,因此您可以将字符串文字传递给任何接受选择器的方法。

2020-07-07