ios - 当 UIAlertController 处于活动状态时,VoiceOver Z 手势不会触发
问题描述
我正在尝试使用 Z 手势来关闭 UIAlertController。我有一个非常简单的应用程序。它有一个带有 1 个按钮的视图。点击按钮会显示警报。我已经实施
- (BOOL)accessibilityPerformEscape {
NSLog(@"Z gesture");
return YES;
}
启用 VoiceOver 后,擦洗屏幕会打印出“Z 手势”,但是当我按下按钮且警报可见时,擦洗屏幕什么也不做,不会调用该方法,也不会打印任何内容。当警报出现在屏幕上时,我需要做什么才能使其正常工作?
谢谢...
解决方案
要通过擦洗手势在警报视图上获得所需的结果,请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
已在此处找到。
推荐阅读
- imputation - na.approx 和 na.locf 行为不正常
- php - 根据 WooCommerce 中的付款方式提高购物车商品价格
- r - tune_bayes() 关于高斯过程不适合没有数据的错误
- javascript - 如何将使用 datetimepicker 获得的值转换为日期和时间?
- flutter - Flutter 后台服务
- reactjs - 在 React 的 Swiper 滑块中动态附加幻灯片
- r - R:只有年和月的日期格式
- graph - DAG 的信息
- html - 我怎样才能在不同角度的这些 li 之间建立联系?
- c# - 扩展方法的c#程序中的未知错误和逻辑错误