【问题标题】:Argument of '#selector' does not refer to an '@objc' method, property, or initializer in Swift button target'#selector' 的参数不引用 Swift 按钮目标中的 '@objc' 方法、属性或初始化程序
【发布时间】:2019-10-19 20:13:33
【问题描述】:

我想用选择器向我的详细信息函数发送参数,但它不起作用,我该怎么做?

btnDetails.addTarget(self, action:#selector(goToDetailsFromMap(mid:id)), for: .touchUpInside)

【问题讨论】:

  • 短篇小说:您不能发送自定义参数。
  • 有什么解决办法吗?
  • 使用像属性这样的临时变量。
  • 有一个循环,例如我有 5 个视图,他们有自己的 id,在循环中我设置了他们的 buttonAction,所以如果我使用临时变量,它不适用于所有人,但是谢谢
  • 您能否分享您的整个问题可能是我们可以尝试提供一些解决方案,因为您无法在选择器方法中传递任何自定义参数。

标签: swift function uibutton selector


【解决方案1】:

您可以创建自定义按钮:

class CustomButton: UIButton {
    var someId: Int?
    ...
}

然后在你的 viewController 中

    ...    
    btnDetails.someId = ...
    btnDetails.addTarget(self, action:#selector(didTapCustomButton(_:)), for: .touchUpInside)
    ...

@objc func didTapCustomButton(_ sender: CustomButton) {
    if let id = sender.someId {
        //Do something with id
    }
}

【讨论】:

    【解决方案2】:

    使用 swift 5.0

    将选择器添加到带有代码的按钮
    myButton.addTarget(self, action:#selector(myButtonTapped), for: .touchUpInside)
    

    函数声明

     @objc func myButtonTapped() {
          //do stuff here
        }
    

    【讨论】:

    • 我知道这一点,但我想将参数发送到 myButtonTapped 函数。喜欢视图ID
    • 您无法发送自定义参数。
    猜你喜欢
    • 2017-05-21
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多