如何在扩展中修改 UIButton 的 accessibilityLabel
how to modify UIButton's accessibilityLabel in an extension
我正在使用记录按钮 accessibilityLabel
的分析工具。
我正在尝试找到一种方法来更新 accessibilityLabel
而无需更改我现有的代码。
对于普通按钮,我使用 titleLabel.text
。对于使用来自图像资产的名称的图标按钮,我使用 accessibilityLabel
本身。
我遇到的一些问题:
- 无法访问其 getter 中的
accessibilityLabel
。因为那会递归地寻找 accessibilityLabel
。
- 所以我不得不使用另一个 属性 作为支持,因为这是一个扩展,我无法使用存储的属性。计算属性也不起作用,因为它会陷入同一个反馈循环。
- 最终我通过使用
accessibilityHint
破解了我的方式。这是一个存储的属性,我没有用...
这行得通!但我一直认为我不应该重写扩展中的函数,因为那是不可靠的。所以我想知道我应该怎么做?
如果 Swift 有任何机制不涉及 UIButton 扩展中的覆盖?!
这是我的代码:
extension UIButton{
private var adjustAccessibilityLabel : String{
if titleLabel?.text?.isEmpty == false{
return titleLabel!.text!
}else if accessibilityHint?.isEmpty == false{
return accessibilityHint!
}else{
return "Empty"
}
}
open override var accessibilityLabel: String?{
get{
return "\(self.adjustAccessibilityLabel))"
}
set{
accessibilityHint = newValue // Hacking my way through!
}
}
}
你在和体制作对。您可以使用 subclassing.
实现此目的
为避免将来出现类似问题,请始终将您的所有 UIButton
、UITableViewCell
、UIViewController
等从您的 中复制class拥有 基础class,这样您就可以轻松进行此类通用更改。
我正在使用记录按钮 accessibilityLabel
的分析工具。
我正在尝试找到一种方法来更新 accessibilityLabel
而无需更改我现有的代码。
对于普通按钮,我使用 titleLabel.text
。对于使用来自图像资产的名称的图标按钮,我使用 accessibilityLabel
本身。
我遇到的一些问题:
- 无法访问其 getter 中的
accessibilityLabel
。因为那会递归地寻找accessibilityLabel
。 - 所以我不得不使用另一个 属性 作为支持,因为这是一个扩展,我无法使用存储的属性。计算属性也不起作用,因为它会陷入同一个反馈循环。
- 最终我通过使用
accessibilityHint
破解了我的方式。这是一个存储的属性,我没有用...
这行得通!但我一直
如果 Swift 有任何机制不涉及 UIButton 扩展中的覆盖?!
这是我的代码:
extension UIButton{
private var adjustAccessibilityLabel : String{
if titleLabel?.text?.isEmpty == false{
return titleLabel!.text!
}else if accessibilityHint?.isEmpty == false{
return accessibilityHint!
}else{
return "Empty"
}
}
open override var accessibilityLabel: String?{
get{
return "\(self.adjustAccessibilityLabel))"
}
set{
accessibilityHint = newValue // Hacking my way through!
}
}
}
你在和体制作对。您可以使用 subclassing.
实现此目的为避免将来出现类似问题,请始终将您的所有 UIButton
、UITableViewCell
、UIViewController
等从您的 中复制class拥有 基础class,这样您就可以轻松进行此类通用更改。