【问题标题】:Argument of '#selector' does not refer to an '@objc' method'#selector' 的参数不引用 '@objc' 方法
【发布时间】:2018-07-27 23:22:41
【问题描述】:

我以编程方式创建的 UIButton 名称是 plusButton,UILabel 名称是 itemLabel,我为此按钮添加了目标;

plusButton.addTarget(self, action: #selector(plusButtonClicked(itemLabel)), for: UIControlEvents.touchUpInside)

@objc func plusButtonClicked(_ sender : UILabel){
   //MY CODE
}

我收到“'#selector' 的参数不引用 '@objc' 方法、属性或初始化程序”错误。当我删除函数中的参数时,没有任何错误。但是,当它是函数中的参数时,我会出错。

【问题讨论】:

  • 您使用了错误的选择器名称 - 自动完成是您的朋友。

标签: swift4 selector


【解决方案1】:

您在代码中使用了错误的选择器。对于你的函数,选择器应该写成#selector(plusButtonClicked(_ :)

你所有的代码都应该是这样的......

plusButton.addTarget(self, action: #selector(plusButtonClicked(_ :)), for:   UIControlEvents.touchUpInside)

@objc func plusButtonClicked(sender:Any) {
    let button = sender as? UIButton
    // you can do whatever want with button.
}

【讨论】:

  • 虽然这可能是正确的,但您确实应该在此处添加有关您为解决此问题所做的工作的说明。
  • 是的......但你的答案只是代码。没有解释它。假装你在这里和人类说话。它有很大帮助,并使您的答案变得更好。
【解决方案2】:

这是错误的:

@objc func plusButtonClicked(_ sender : UILabel)
                                        ^^^^^^^

您不能发送标签作为按钮点击的参数。参数是按钮,您无法更改它。

您无法通过尝试更改选择器中的参数来绕过这些规则。选择器没有参数。

您需要一些其他方法来确定哪个是正确的标签。

【讨论】:

    【解决方案3】:

    应该是这样的:

    plusButton.addTarget(self, action: #selector(plusButtonClicked(_ :)), for: UIControlEvents.touchUpInside)
    

    更新它。

    【讨论】:

      猜你喜欢
      • 2017-05-21
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多