ios - 当 UIAlertController 处于事件状态时,VoiceOver Z 手势不会触发

标签 ios objective-c uialertcontroller voiceover uiaccessibility

我正在尝试使用 Z 手势来关闭 UIAlertController。我有一个非常简单的应用程序。它有一个带有 1 个按钮的单一 View 。点击按钮会出现警报。我已经实现了

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

打开 VoiceOver 后,擦洗屏幕会打印出“Z 手势”,但是当我按下按钮并且警报可见时,擦洗屏幕不会执行任何操作,不会调用该方法,也不会打印任何内容。当屏幕上出现警报时,我需要做什么才能使其正常工作?

谢谢...

最佳答案

要通过拖动手势在警报 View 上获得所需的结果,请在警报 View 本身中重写 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 .

关于ios - 当 UIAlertController 处于事件状态时,VoiceOver Z 手势不会触发,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51755670/

相关文章:

ios - 无法使用 ReactiveCocoa 观察 NSMutableSet 添加

ios - 在 RTL 布局中强制 UIImageView 对齐 LTR

ios - 在多个分区中拆分视频

objective-c - cocoa文件关联问题

swift - 添加文本字段 MDCAlertController IOS

ios - 如何创建可重用的 UIAlertcontroller?

ios - 在应用程序进入后台之前允许用户输入

c# - UITableViewDelegate 中的问题 - RowSelected 给出了错误的 NSIndexPath

ios - UIScrollView 内不可滚动的 UITableView

ios - 在 iOS 中确定闭合轮廓的算法