ios - 我可以快速将属性值添加到选择器吗?
问题描述
我一直在阅读有关选择器的信息,现在想知道是否有一种方法可以通过选择器发送函数属性的值。
我有一个方法:
@objc func acceptBiometrics(newValue: Int){
}
还有一个选择器:
#selector(acceptBiometrics(newValue:))
那么有没有一种方法可以发送让我们说 1 作为新值,这样我就可以有两个调用相同函数的选择器,只是具有不同的值?
编辑1:然后我将此选择器发送到某个视图控制器以创建我自己的带有按钮的警报视图控制器。所以选择器在一个完全不同的视图控制器中被调用。这是唯一的方法,然后也发送该 vc 也是我想用选择器发送的值吗?我没有办法像 #selector(self.acceptBiometrics(newValue: 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.
}
然后你实例化它,并将你的 sender 参数类型更新为ButtonWithValue
. 在您检查的处理程序内部sender.value
推荐阅读
- excel - 使用 find 函数时如何在 VBA 中附加到 xlValues?
- html - 使用非默认过滤器打开页面的 URL?
- pm2 - 如何在名称包含逗号的生态系统.json 文件中重新启动特定的 pm2 进程 ex:“test-1,2,34'
- mysql - LIKE 查询没有禁用 MySQL 中的复合索引的原因是什么
- numpy - 使用 einsum 从 5d 矩阵中提取对角线(横向向下)
- amazon-web-services - 双 NAT iptables
- java - 如何将节点对象注入spring mvc中的服务类?
- asp.net-core - 运行 aspnetcore 应用程序,使用它的 API 并从 Azure DevOps 关闭
- regex - 驼峰模式匹配
- javascript - 将数组映射到对象