【问题标题】:UIAccessibility focus with a UITabBarController使用 UITabBarController 的 UIAccessibility 焦点
【发布时间】:2019-10-04 10:06:37
【问题描述】:

如何将UIAccessibility 的焦点设置在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)
        }
    } 

我也尝试将焦点设置在选定的UIViewController

    override func viewDidAppear(_ animated: Bool) {

        super.viewDidAppear(animated)

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

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

【问题讨论】:

    标签: ios swift uitabbarcontroller voiceover uiaccessibility


    【解决方案1】:

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

    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)
                 })
            }
    }
    

    【讨论】:

    • 为什么要用这么复杂的方法给异步加时间?这似乎也适用于 .announcement,但不适用于 .screenchanged。
    猜你喜欢
    • 2019-09-26
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-02-15
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多