我正在尝试使用 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/