我想了解可访问性重点更改。
我搜索并尝试了5,ssew,wss
5,ffdc,oop
5,wwde,eer
5,dfvw,ooi
,但是在更改光标后没有触发。我想为按钮添加值,并在更改光标后删除该值。
我的代码如下:
accessibilityElementDidBecomeFocused
首先,它显示为“更改闪光灯状态”,如果我双击它,则显示为“打开闪光灯状态”,这是正确的。
如果我更改光标并返回到闪光灯按钮,它应该说再次更改闪光灯状态。但是它说“打开了闪光灯状态”
我该如何实现?
答案 0 :(得分:1)
我搜索并尝试了
accessibilityElementDidBecomeFocused
,但是在更改光标后没有触发。
如果要使用UIAccessibilityFocus
非正式协议方法,则必须直接在对象中而不是在视图控制器(请参阅this answer)中重写它们。例如,创建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
非正式协议来关注重点变化,或者只是使用上面的代码段来更改可访问性元素的状态:您可以将两者结合起来,您可以根据自己的编码环境来调整这些概念。 ; o)
如果这还不够,请查看专门针对所有开发人员的this site,其中提供了代码片段和说明,以为您的实现找到另一种解决方案。