ios - UIAccessibility - 当关闭另一个视图时,将焦点设置到上一个可访问性元素
问题描述
我正在将可访问性实现到我们当前的项目中,并且在将焦点设置在以前的视图控制器中的元素上时遇到了一些问题。
一个例子是:
用户在索引 3 处的 tableview 单元格上进行选择。在didSelectRowAt
中,我们向用户呈现UIActionSheet
用户进行选择的位置。一旦用户做出选择并且所呈现UIActionSheet
的内容被关闭,应在 tableview 单元格索引 3 处选择可访问性焦点,但焦点会设置回视图中的初始元素,在我的情况下是最左上角的元素。
在呈现模态视图时,我使用UIAccessibility.Notification
.screenChanged
并UIView.accessibilityViewIsModal
设置了新焦点,但这似乎没有一个很好的解决方案来在关闭视图时指向前一个元素。
任何有关如何跟踪先前可访问性元素焦点的见解将不胜感激。
解决方案
首先,创建一个变量,将先前的位置存储在TableViewController
:
var previousPosition: IndexPath?
然后,一旦你点击一个单元格,就存储这个位置:
override func tableView(_ tableView: UITableView,
didSelectRowAt indexPath: IndexPath) {
previousPosition = indexPath
}
最后,当关闭呈现时UIActionSheet
(后退按钮示例如下),以下代码片段选择并聚焦已触发最新点击的表格视图单元格:
var actionSheet: UIAlertController?
actionSheet = UIAlertController(title: "Action Sheet",
message: "Ready to go back?",
preferredStyle: .actionSheet)
let backButton = UIAlertAction(title: "B.A.C.K.",
style: .cancel,
handler: { (action) -> Void in
print("Back button tapped")
self.tableView.selectRow(at: self.previousPosition,
animated: true,
scrollPosition: .none)
let currentCell = self.tableView.cellForRow(at: self.previousPosition!)
UIAccessibility.post(notification:.layoutChanged,
argument: currentCell)
})
actionSheet!.addAction(backButton)
在一个空白项目中查看此代码片段的结果,并在您的应用程序中对其进行调整以使其按需要工作。
编辑:除了我的代码片段,看看表视图的实例属性,它可以与视图控制器remembersLastFocusedIndexPath
的实例属性一起提供直接结果。restoresFocusAfterTransition
推荐阅读
- javascript - 将数组传递给烧瓶应用程序中的谷歌图表数据集
- javascript - D3.js version3 scale.ordinal() 没有按照我想要的方式读取我的数据
- python - Python中的文本组合生成器
- autodesk-forge - 您可以从 web.autocad.com 的 Web & Mobile 目录查询、翻译和打开 .dwg 文件吗?
- sql - 为什么在大 IN 条件下投射到地理更快?
- python - 在 for 循环中将完整数组附加到其他数组,类似于附加到列表(python)?
- python - 如何从 USB 端口看到持续的 8 位灰度图像数据流?
- search - zomato Api 不返回按聚合评级搜索的餐厅
- java - 如何修复 javacord 错误 java.security.InvalidAlgorithmParameterException
- c# - 在 Roslyn CSharpScript 中执行一个方法并传递参数,而不必将它们作为字符串或通过全局变量传递?