UIAccessibility - 当关闭另一个视图时,将焦点设置到上一个辅助功能元素

Posted

技术标签:

【中文标题】UIAccessibility - 当关闭另一个视图时,将焦点设置到上一个辅助功能元素【英文标题】:UIAccessibility - When dismissing another view, set focus to previous accessibility element 【发布时间】:2019-04-08 22:14:18 【问题描述】:

我正在我们当前的项目中实现可访问性,但在将焦点设置在以前的视图控制器中的元素上时遇到了一些问题。

一个例子是:

用户在索引 3 处的 tableview 单元格上进行选择。在didSelectRowAt 中,我们向用户显示UIActionSheet,用户在其中进行选择。一旦用户做出选择并且呈现的UIActionSheet 被解除,可访问性焦点应该在tableview 单元格索引3 处选择,但是焦点被设置回视图中的初始元素,在我的例子中是最左上角的元素.

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

任何关于如何跟踪先前可访问性元素焦点的见解将不胜感激。

【问题讨论】:

【参考方案1】:

首先,创建一个变量来存储TableViewController中的先前位置:

var previousPosition: IndexPath?

然后,一旦你点击一个单元格,就存储这个位置:

override func tableView(_ tableView: UITableView,
                        didSelectRowAt indexPath: IndexPath) 

    previousPosition = indexPath

最后,当呈现的UIActionSheet 被关闭时(后面的后退按钮示例),下面的代码 sn-p 选择并聚焦触发了最新点击的表格视图单元格:

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)

在一个空白项目中检查此代码 sn-p 的结果,并在您的应用中对其进行调整以使其按需要工作。

EDIT:除了我的代码 sn-p 之外,看看表视图的 remembersLastFocusedIndexPath 实例属性,它可以提供直接结果restoresFocusAfterTransition 视图控制器的实例属性。

【讨论】:

以上是关于UIAccessibility - 当关闭另一个视图时,将焦点设置到上一个辅助功能元素的主要内容,如果未能解决你的问题,请参考以下文章

Swift:从视图到警报视图或到另一个视图的语音转换

iOS:带有复选框的 UIAccessibility(配音)无法正常工作

你如何实现 UIAccessibility 协议?

如何使用 UIAccessibility 协议在 iOS 上的模式弹出窗口中捕获焦点?

Swift 5.2 UIAccessibility.isAssistiveTouchRunning 永远不会返回 true,也不会触发 UIAccessibility.assistiveTouchSt

如何将唯一指针从一个向量移动到另一个唯一指针向量? [关闭]