我可以快速将属性值添加到选择器吗?

时间:2019-02-06 12:25:34

标签: ios swift selector

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

我有一个方法:

@objc func acceptBiometrics(newValue: Int){
}

还有一个选择器:

#selector(acceptBiometrics(newValue:))

有没有一种方法可以让我说1作为新值,这样我就可以让两个选择器使用相同的值来调用相同的函数?

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

2 个答案:

答案 0 :(得分:1)

不要

您可以使用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.
}

然后实例化它,并将发送者参数类型更新为ButtonWithValue。在处理程序中,您检查sender.value

答案 1 :(得分:0)

您无法使用选择器传递值,请使用以下方法通过UIbutton标签传递Int值。

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

功能

@objc func acceptBiometrics(_ sender: UIbutton){
    print(sender.tag) //Output 5
}