首页 > 解决方案 > 使用 UITabBarController 的 UIAccessibility 焦点

问题描述

如何将UIAccessibility焦点设置在 a 的选定选项卡的内容上UITabBarController?它一直专注于选定的UITabBarItem.

我试图将焦点设置在UITabBarControllerDelegate

    func tabBarController(_ tabBarController: UITabBarController, didSelect viewController: UIViewController) {

        if let destination = (viewController as? UINavigationController)?.viewControllers.first {
            UIAccessibility.post(notification: .screenChanged, argument: destination)
        } else {
            UIAccessibility.post(notification: .screenChanged, argument: viewController)
        }
    } 

我也尝试在 selected 中设置焦点UIViewController

    override func viewDidAppear(_ animated: Bool) {

        super.viewDidAppear(animated)

        UIAccessibility.post(notification: .screenChanged, argument: accessibilityElements?.first)
    }

不幸的是,可访问性焦点没有改变。我不确定这是 iOS 13 问题还是一般标签栏问题,因为即使是 Apple 自己的 AppStore 应用程序在选择标签时也不会改变可访问性焦点。

标签: iosswiftuitabbarcontrollervoiceoveruiaccessibility

解决方案


我不确定它有多大帮助,但我设法通过延迟发布通知找到了解决方法。

override func viewDidAppear(_ animated: Bool) {
        super.viewDidAppear(animated)
        if UIAccessibility.isVoiceOverRunning {
             DispatchQueue.main.asyncAfter(deadline: DispatchTime.now() + Double(Int64(1.0 * Double(NSEC_PER_SEC))) / Double(NSEC_PER_SEC), execute: {
                 UIAccessibility.post(notification: .layoutChanged, argument: self.whateverElementYouNeed)
             })
        }
}

推荐阅读