Я искал и пытался accessibilityElementDidBecomeFocused
, но не сработал после изменения курсора.
Если вы хотите использовать UIAccessibilityFocus
методы неформального протокола, вы ДОЛЖНЫ переопределить их в вашем объекте напрямую, а не в контроллере представления (см. этот ответ ) . Создайте подкласс UIButton
, например:
import UIKit
class FlashButton: UIButton {}
extension FlashButton {
override open func accessibilityElementDidBecomeFocused() {
// Actions to be done when the element did become focused.
}
}
Если я поменяю курсор и вернусь к кнопке вспышки, то должно произойти изменение статуса вспышки.
Независимо от того, сколько раз вы нажимаете кнопку флэш-памяти, всегда нужно сначала прочитать желаемое состояние, прежде чем сказать, чтобы изменить его значение.
Пример приведен в следующем коде:
class FlashButton: UIButton {
private var intStatus: Bool = false
private var a11yLabelStatus: String = "off"
var status: Bool {
get { return intStatus }
set(newValue) { intStatus = newValue }
}
}
extension FlashButton {
override open func accessibilityElementDidBecomeFocused() {
// Actions to be done when the element did become focused.
}
override open func accessibilityElementDidLoseFocus() {
// Actions to be done when the element did lose focus.
}
//This native a11y function replaces your defined IBAction to change and read out the flash status.
override func accessibilityActivate() -> Bool {
intStatus = (intStatus == true) ? false : true
a11yLabelStatus = (intStatus == true) ? "on" : "off"
UIAccessibility.post(notification: .announcement,
argument: "flash status is " + a11yLabelStatus)
return true
}
override var accessibilityLabel: String? {
get { return "the flash status is " + a11yLabelStatus }
set { }
}
override var accessibilityHint: String? {
get { return "double tap to change the value." }
set { }
}
}
Как мне этого добиться?
Либо вы пытаетесь использовать неформальный протокол UIAccessibilityFocus
, чтобы поймать изменение фокуса, либо просто используете приведенный выше фрагмент кода, чтобы изменить статус вашего элемента доступности : вы можете комбинировать и то, и другое до вам адаптировать эти концепции в вашей среде программирования. ; О)
Если этого недостаточно, загляните на этот сайт , посвященный 11 разработчикам, где доступны фрагменты кода и иллюстрации, чтобы найти другое решение для вашей реализации.