我一直在阅读有关选择器的信息,现在想知道是否有一种方法可以通过选择器发送函数属性的值。
我有一个方法:
@objc func acceptBiometrics(newValue: Int){
}
还有一个选择器:
#selector(acceptBiometrics(newValue:))
有没有一种方法可以让我说1作为新值,这样我就可以让两个选择器使用相同的值来调用相同的函数?
编辑1: 然后,我将此选择器发送到某个视图控制器,以使用按钮创建我自己的警报视图控制器。因此,选择器在完全不同的视图控制器中被调用。这是同时发送该vc和我要使用选择器发送的值的唯一方法吗? 我没有办法像#selector(self.acceptBiometrics(newValue: 1 ))
答案 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
}