ios - Swift:从视图到警报视图或到另一个视图的语音转换
问题描述
我目前正在开发一个应用程序,我正在使用 UIAccessibility 使其直观且易于所有人使用。
我面临着我认为是一个简单的挑战,但我就是想不通,我需要任何指导和/或帮助。
我有一个 tableView,当一个单元格根据其内容被点击时,它要么呈现一个警报视图,要么呈现一个 viewController。当启用画外音并点击单元格时,画外音会停留在前一个视图上,而不是呈现的 viewController 或 alertView 上。我如何做到这一点,当点击一个单元格时,画外音会专注于当前视图而不是前一个视图。
我已经尝试将上一个视图的 accessibilityViewIsModal 设置为 false 和 true 来呈现视图。
func tableView(_ tableView: UITableView, didSelectRowAt indexPath: IndexPath) {
tableView. accessibilityViewIsModal = false
}
实际结果:画外音关注前一个视图 预期结果:画外音应该关注呈现的警报视图。
解决方案
大多数时候,当呈现警报或模态视图控制器时,它应该可以正常工作。你能分享更多关于你如何展示这些的细节吗?如果您正在使用自定义模式演示文稿或者您有自定义警报视图,您有时可能需要通知 UIAccessibility 屏幕已更改。您可以发布这样的通知:
UIAccessibility.post(notification: .screenChanged, argument: customModalView)
其中 customModalView 是您想要获得 VoiceOver 焦点的视图。有时您可能还会发现您描述的问题,焦点仍然可以跳转到当前视图下方的视图中的元素。为此,您可以使用您提到的属性accessibilityViewIsModal
。但此属性的值默认为 false,您必须将您的 'modalView' 设置为模态,以便在呈现时为可访问性目的,这将允许 VoiceOver 知道它需要跳过任何同级视图。
customModalView.accessibilityViewIsModal = true
我希望这有帮助!
推荐阅读
- java - java gui背景颜色不覆盖整个页面
- python - 将数百万个文件移动到 Amazon Glacier
- asp.net-core - 在为 asp.net core v3.1 应用程序进行 webdeploy 时如何设置“stdout=true”?
- mysql - Mysql INNER JOIN + MATCH AGAINST:如何加速
- java - notifyAll() 后函数继续,但函数返回后线程终止
- google-cloud-firestore - Firestore .set 不保存来自 Firebase 云功能的数据
- c++ - 写一个宏函数来改变字符串的大小写?
- c - 将结构内的整数类型数组初始化为 NULL 是否可以/有效?
- python - 如何将一天中的分钟附加到 Python 中的列表中?
- mysql - mysql复制错误:截断不正确的DOUBLE值