UIAccessibility-关闭另一个视图时,将焦点设置为上一个可访问性元素

时间:2019-04-08 22:14:18

标签: ios swift uiaccessibility

我正在将可访问性实现到当前项目中,并且在将焦点放在以前的ViewController中的某个元素上时遇到了一些问题。

一个例子是:

用户在表视图单元格的索引3上进行选择。在didSelectRowAt中,我们向用户显示UIActionSheet,用户在其中进行选择。一旦用户做出选择并且所显示的UIActionSheet被取消,则应在表格单元格索引3处选择可访问性焦点,但应将焦点重新设置为视图中的初始元素,在我的情况下,大多数情况是左元素。

在呈现模态视图时,我已经使用UIAccessibility.Notification .screenChangedUIView.accessibilityViewIsModal设置了新的焦点,但这似乎并没有一个很好的解决方案来指向上一个取消视图时的元素。

任何对如何跟踪以前的可访问性元素焦点的见识将不胜感激。

1 个答案:

答案 0 :(得分:1)

首先,创建一个变量,该变量将在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 实例属性。