Как изменить UIButton accessibilityLabel в расширении
Я использую инструмент аналитики, который регистрирует accessibilityLabel
кнопок. Я пытаюсь найти способ обновить accessibilityLabel
без изменения моего существующего кода.
Для обычных кнопок я использую titleLabel.text
, Для iconButtons, которые используют свое имя из изображений, которые я использую accessibilityLabel
сам.
Некоторые проблемы, с которыми я столкнулся:
- не может получить доступ
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!
}
}
}
1 ответ
Вы боретесь с системой. Вы можете добиться этого, используя подклассы.
Чтобы избежать подобных проблем в будущем, всегда имейте ВСЕ ваши UIButton
, UITableViewCell
, UIViewController
и т. д. подклассы из вашего собственного базового класса, чтобы вы могли легко сделать такие универсальные изменения.