UIAlertController处于活动状态时,不会触发VoiceOver Z手势

时间:2018-08-08 21:07:56

标签: ios objective-c uialertcontroller voiceover uiaccessibility

我正在尝试使用Z手势关闭UIAlertController。我有一个非常简单的应用程序。它具有1个按钮的单个视图。轻击按钮会发出警报。我已经实现

- (BOOL)accessibilityPerformEscape {
    NSLog(@"Z gesture");
    return YES;
}

在启用VoiceOver的情况下,擦洗屏幕会打印出“ Z手势”,但是当我按下该按钮并且可见警报时,擦洗屏幕不会执行任何操作,不会调用该方法,也不会打印任何内容。我该怎么办才能使警报显示在屏幕上?

谢谢...

1 个答案:

答案 0 :(得分:0)

要通过警报手势在警报视图中获得理想的结果,您可以在警报视图本身中覆盖accessibilityPerformEscape()

一种解决方案可能是在UIView扩展中实现此替代,如下所示:

extension UIView {

override open func accessibilityPerformEscape() -> Bool {

    if let myViewController = self.findMyViewController() as? UIAlertController {

        myViewController.dismiss(animated: true,
                                 completion: nil)
    }
    return true
}


private func findMyViewController() -> UIViewController? {

    if let nextResponder = self.next as? UIViewController {
        return nextResponder
    } else if let nextResponder = self.next as? UIView {
        return nextResponder.findMyViewController()
    } else {
        return nil
    }
}

}

该代码足够简短,无需进一步说明即可理解。如果不清楚,请不要犹豫。

已找到功能findMyViewController here