如何捕捉可访问性焦点改变了?

时间:2019-06-10 14:34:07

标签: ios swift accessibility

我想了解可访问性重点更改。

我搜索并尝试了5,ssew,wss 5,ffdc,oop 5,wwde,eer 5,dfvw,ooi ,但是在更改光标后没有触发。我想为按钮添加值,并在更改光标后删除该值。

我的代码如下:

accessibilityElementDidBecomeFocused

首先,它显示为“更改闪光灯状态”,如果我双击它,则显示为“打开闪光灯状态”,这是正确的。

如果我更改光标并返回到闪光灯按钮,它应该说再次更改闪光灯状态。但是它说“打开了闪光灯状态”

我该如何实现?

1 个答案:

答案 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,其中提供了代码片段和说明,以为您的实现找到另一种解决方案。