如何捕捉可访问性焦点的变化?

2023-12-07

我想捕捉可访问性焦点的变化。

我搜索并尝试过accessibilityElementDidBecomeFocused但光标改变后没有触发。我想向按钮添加值,并在光标更改后删除该值。

我的代码是这样的:

override func viewDidLoad() {
    flashButton.accessibilityLabel = "Change the flash status"
    flashButton.accessibilityTraits = [.button]
    flashButton.accessibilityIdentifier = "flashButton"
}

@IBAction func flashButtonTapped(_ sender: Any) {
    var currentFlashStatus = "off"
    guard let device =  AVCaptureDevice.default(AVCaptureDevice.DeviceType.builtInWideAngleCamera, for: AVMediaType.video, position: .back) else { return }
    guard device.hasTorch else { return }
    do {
        try device.lockForConfiguration()
        if device.torchMode == .on {
            device.torchMode = .off
            flashButton.image = UIImage(named: "flashOffIcon")
            currentFlashStatus = "off"
        } else {
            do {
                try device.setTorchModeOn(level: 1.0)
                flashButton.image = UIImage(named: "flashOnIcon")
                currentFlashStatus = "on"
            } catch {
                print(error)
            }
        }
        device.unlockForConfiguration()
    } catch {
        print(error)
    }
    flashButton.accessibilityLabel = "Turned \(currentFlashStatus) the flash"
}

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

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

我怎样才能做到这一点?


我搜索并尝试过accessibilityElementDidBecomeFocused但光标改变后没有触发。

如果您想使用UIAccessibilityFocus非正式协议方法,您必须直接在对象中重写它们,而不是在视图控制器中(see 这个答案)。创建一个子类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)

如果还不够,请看一下这个网站专门面向 a11y 开发人员,其中提供代码片段和插图,帮助您找到适合您实施的另一种解决方案。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

如何捕捉可访问性焦点的变化? 的相关文章

  • 无法连接到 iTunes Store(获取应用内购买列表)

    我正在尝试从我的应用程序的应用程序内购买项目商店中获取列表 这是我所做的 安装了新的配置文件并启用了应用内购买 替换配置文件很棘手 但我认为我的设置是正确的 验证税务和银行信息是否正常 该应用程序已在商店出售 创建测试用户 在测试设备上以测
  • .showsPhysics 内存泄漏

    我最近花了 5 个小时尝试调试 Spritekit 应用程序中的内存泄漏 应用程序启动后 我注意到内存使用量略有上升 我花了 5 个小时中的 3 个小时挖掘参考资料 了解强与弱的关系ARC https developer apple com
  • 如何在iOS中处理1到3个手指的滑动手势

    我使用以下代码来处理代码中的 1 根手指滑动 UISwipeGestureRecognizer swipe UISwipeGestureRecognizer alloc initWithTarget self action selector
  • `navigator.geolocation.getCurrentPosition()` 在 iOS PWA 上挂起

    我有这个片段 const getCurrentPosition gt new Promise
  • React-native-vision-camera无法访问后面的普通摄像头

    我正在尝试在 iPhone 11 Pro 上使用 普通 相机 我使用反应本机视觉相机 当我运行这段代码时 const devices useCameraDevices const deviceBack devices back consol
  • 使用 实现可访问性的更好做法是什么?

    我有一个下载链接 但我找不到任何良好的可访问解决方案来说明如何处理这种情况 我遵循一个共同的经验法则 按钮做事 链接去地方 我的情况是 我有一个触发文档下载的按钮 同一页面 我相信这应该是一个具有按钮角色的锚点 因为它明确不触发重定向或导航
  • locationOfTouch 和 numberOfTouches

    你好 我有这个识别器 设置为 2 次触摸 但它只返回一个 而不是两个 CGPoint void gestureLoad UIGestureRecognizer recognizer recognizer UITapGestureRecogn
  • 从一个模态视图无缝翻转到另一个模态视图,而不显示纯色背景

    我的 iPad 应用程序的 UI 如下 当我点击Settings按钮 我希望对话框水平翻转以显示设置对话框 我这个工作正常 但是 当对话翻转时会显示背景颜色 如你看到的 有什么办法可以让对话框翻转时不显示该颜色块吗 我希望它看起来更加无缝
  • 每 24 小时触发一次方法

    我正在尝试每天在给定时间触发一个方法 我尝试了一些方法 但我无法真正使其发挥作用 任何意见 将不胜感激 此外 如果无论应用程序是否打开它都会触发 那就更理想了 这可能吗 UI本地通知 http developer apple com lib
  • iOS 中 NSDecimalNumber 的小数分隔符错误

    我尝试通过以下方式输出具有正确的小数分隔符的十进制数的描述 NSString strValue 9 94300 NSDecimalNumber decimalNumber NSDecimalNumber decimalNumberWithS
  • ios swift parse:从 3 个类收集数据

    我有这样的结构 User CardSet 带有指向 User objectId 的指针 user 和 col name 带有点 cards 的卡片到 Card Set objectId 和列 name 我想选择所有卡数据 包括当前用户的卡集
  • dyld:无法加载插入的库

    当我尝试运行 UI 和单元测试时 出现异常 dyld 无法加载插入的库 private var containers Bundle Application AutoTestingApp app Frameworks IDEBundleInj
  • 为什么 iOS 启动屏幕很慢?

    我的 iOS 应用程序启动屏幕大约需要 3 5 秒 我有一张将在启动屏幕后加载的地图 我的用户必须等待启动屏幕加载 然后再等待 3 秒才能加载地图 有没有办法最大限度地减少启动屏幕时间 基本上这种延迟意味着you在启动过程中做了一些非常错误
  • iOS 7 上 Safari 浏览器的用户代理

    我只想在带有 Safari 浏览器的 iPhone 和 iPod 中打开我的网站 对于 Chrome Dolphin 等任何其他浏览器 它不应该打开 但目前我从几乎所有设备获得相同的用户代理 对于Safari User Agent Stri
  • “预期的 ';'在 Swift 下的顶级声明符之后”

    我正在尝试将所有颜色设置在一个 Swift 文件中 该文件可以在我的整个应用程序中使用 下面的代码会导致 import Foundation import UIKit class DotColors let tsblueColor UICo
  • UIView 圆角 - Swift 2.0?

    我会尝试将一些项目更新到 Swift 2 0 我有一个视图 左上角有一个圆角 在 Swift 没有警告 没有错误 只是没有圆角 这就是它在 Swift let maskPath UIBezierPath roundedRect conten
  • 如何使用 RX 应用宽限时间?

    我有一个Observable
  • 如何在 UICollectionView 中将行居中?

    我有一个UICollectionView与随机细胞 有什么方法可以让我将行居中吗 默认情况下它是这样的 x x x x x x x x x x x x x x 这是所需的布局 x x x x x x x x x x x x 我必须做这样的事
  • iPhone 上的纵向 UISplitViewController 在 iOS 8 中始终显示主视图和细节视图

    UISplitViewController in portrait在 iPhone 上始终显示主控和细节iOS 8 我尝试子类化UISplitViewController并将其配置为同时显示主视图和细节视图 但没有任何效果 class AP
  • 更改 iOS7 中 UIAlertView 的字体大小

    我想更改alertView中消息文本和标题文本的字体大小 苹果网站上没有任何文档谈到这一点 但苹果在其子类注释中表示 UIAlertView 类旨在按原样使用 请参考以下链接 https developer apple com librar

随机推荐