как изменить UIButton accessibilityLabel в расширении - PullRequest
0 голосов
/ 06 июня 2018

Я использую аналитический инструмент, который регистрирует accessibilityLabel кнопок.Я пытаюсь найти способ обновить accessibilityLabel без изменения моего существующего кода.

Для обычных кнопок я использую titleLabel.text.Для кнопок iconBet, которые используют свое имя, полученное из ресурсов изображения, я использую 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 Ответ

0 голосов
/ 12 июня 2018

Вы боретесь с системой.Вы можете добиться этого, используя подклассы .

Чтобы избежать подобных проблем в будущем, всегда делайте ВСЕ ваши UIButton, UITableViewCell, UIViewController и т. Д. Подклассами из вашего собственный базовый класс, чтобы вы могли легко вносить такие универсальные изменения.

...