首页 > 解决方案 > 我可以快速将属性值添加到选择器吗?

问题描述

我一直在阅读有关选择器的信息,现在想知道是否有一种方法可以通过选择器发送函数属性的值。

我有一个方法:

@objc func acceptBiometrics(newValue: Int){
}

还有一个选择器:

#selector(acceptBiometrics(newValue:))

那么有没有一种方法可以发送让我们说 1 作为新值,这样我就可以有两个调用相同函数的选择器,只是具有不同的值?

编辑1:然后我将此选择器发送到某个视图控制器以创建我自己的带有按钮的警报视图控制器。所以选择器在一个完全不同的视图控制器中被调用。这是唯一的方法,然后也发送该 vc 也是我想用选择器发送的值吗?我没有办法像 #selector(self.acceptBiometrics(newValue: 1 ))

标签: iosswiftselector

解决方案


没有

您可以使用button.tag并为其设置 1(或任何其他Int值)。

let button = UIButton()
button.tag = 1
button.addTarget(self, action: #selector(acceptBiometrics(_ :)), for: .touchUpInside)

然后在你的处理程序上:

@objc func acceptBiometrics(_ sender : UIButton) {
    print(sender.tag)
}

笔记:

tag属性是一个变量Int,因此如果您需要其他任何属性,Type您应该只使用一个新变量创建一个自定义UIButton

tag默认值为 0,这意味着如果 0 是您的逻辑中的可能值,您还应该使用自定义组件方法。

正如@matt 指出的那样,“选择器是方法的名称,而不是对方法的调用”。

正如@Sulthan 指出的那样,“子类化是真正的解决方案”。

子类如下所示:

class ButtonWithValue : UIButton {
    var value : Int? // note that this could be any Type.
}

然后你实例化它,并将你的 sender 参数类型更新为ButtonWithValue. 在您检查的处理程序内部sender.value


推荐阅读