如何在扩展中修改UIButton的accessibilityLabel

时间:2018-06-06 19:14:41

标签: ios swift override swift-extensions

我使用记录accessibilityLabel按钮的分析工具。 我试图找到一种方法来更新accessibilityLabel而不更改现有代码。

对于普通按钮,我使用titleLabel.text。对于使用来自图像资源的名称的iconButtons,我使用accessibilityLabel本身。

我遇到的一些问题:

  • 无法在其getter中访问accessibilityLabel。因为那会以递归方式查找accessibilityLabel
  • 所以我不得不使用另一个属性进行支持,因为这是一个扩展,所以我无法使用存储的属性。计算属性不起作用,因为它会卡在同一个反馈循环中。
  • 最终我使用accessibilityHint破解了我的方式。它是我没有使用的存储属性...

这有效!但我已经told and read不应该覆盖扩展程序中的功能不可靠的。所以我想知道我应该怎么做?

如果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!
        }
    }
}

1 个答案:

答案 0 :(得分:0)

你正在与系统作斗争。您可以使用子类化来实现此目的。

为避免将来出现类似问题,请始终将您的拥有的基类中的所有UIButtonUITableViewCellUIViewController等子类化,这样您就可以容易做出这样的普遍变化。