UIAccessibility - 关闭另一个视图时,将焦点设置到上一个可访问性元素
UIAccessibility - When dismissing another view, set focus to previous accessibility element
我正在为我们当前的项目实现可访问性,并且在将焦点设置在之前的一个元素上时遇到一些问题 viewcontroller。
例如:
用户在索引 3 处的表格视图单元格上进行选择。在 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
被关闭时 (后退按钮示例),以下代码片段选择并聚焦 table 视图最近触发点击的单元格:
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
instance property of the table view that may provide the direct result in conjunction with the restoresFocusAfterTransition
实例 属性视图控制器。
我正在为我们当前的项目实现可访问性,并且在将焦点设置在之前的一个元素上时遇到一些问题 viewcontroller。
例如:
用户在索引 3 处的表格视图单元格上进行选择。在 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
被关闭时 (后退按钮示例),以下代码片段选择并聚焦 table 视图最近触发点击的单元格:
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
instance property of the table view that may provide the direct result in conjunction with the restoresFocusAfterTransition
实例 属性视图控制器。