将参数传递给swift中的按钮操作

9fkzdhlc  于 2023-01-16  发布在  Swift
关注(0)|答案(2)|浏览(43)

在Swift中使用“addTarget”方法在按钮上设置操作时,有没有办法将参数传递给我想要触发的函数?假设我有一个简单的场景:

let button = UIButton()
button.addTarget(self, action: #selector(didPressButton), for: .touchUpInside)

@objc func didPressButton() {
    // do something
}

显然,上面的代码工作正常,但是假设我想让'didPressButton'函数接受一个参数:

@objc func didPressButton(myParam: String) {
    // do something with myParam
}

有没有方法可以将参数传递给'addTarget'方法中的函数?类似于:

let button = UIButton()
button.addTarget(self, action: #selector(didPressButton(myParam: "Test")), for: .touchUpInside)

@objc func didPressButton(myParam: String) {
    // do something with myParam
}

我来自JavaScript背景,在JavaScript中,通过简单地传递一个匿名函数,然后调用'didPressButton'函数来实现这个行为是非常简单的。但是,我不太清楚如何用swift实现这个行为。通过使用闭包可以使用类似的技术吗?或者'#selector'关键字阻止我做类似的事情吗?
感谢所有能帮忙的人!

qyyhg6bp

qyyhg6bp1#

简短的回答是否定的。
目标选择器机制只在参数中发送目标,如果字符串是UIButton子类的一部分,那么你可以从那里获取它。

class SomeButton: UIButton {
  var someString: String

}

@objc func didPressButton(_ button: SomeButton) {
  // use button.someString
}
slsn1g29

slsn1g292#

在iOS中是不可能做到这一点的。你可以在选择器中获得视图,在你的情况下,它是一个按钮。

button.addTarget(self, action: #selector(buttonClick(_:)), for: .touchUpInside)

@objc func buttonClick(_ view: UIButton) {
    switch view.titleLabel?.text {
    case "Button":
        break
    default:
        break
    }
}

相关问题