我一直在努力使使用VoiceOver可以访问UITableView SwipeActions。
我想,由于它是苹果公司开发的所有组件,因此都可以100%访问并且可以与VoiceOver完美配合。
为此,我创建了一个新的iOS项目,其中的一个视图包含一个带有硬编码数据的UITableView。
这是ViewController的代码:
class ViewController: UIViewController {
@IBOutlet weak var tableView: UITableView!
lazy var handler: UIContextualAction.Handler = {
return { (action, _, _) in
print("action \(action.title!) was clicked")
}
}()
let data = [1,2,3,4,5,6,7]
override func viewDidLoad() {
super.viewDidLoad()
}
}
extension ViewController: UITableViewDelegate, UITableViewDataSource {
func tableView(_ tableView: UITableView, numberOfRowsInSection section: Int) -> Int {
return data.count
}
func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell {
let cell = tableView.dequeueReusableCell(withIdentifier: "cell") as! UITableViewCell
cell.textLabel?.text = "title \(String(data[indexPath.row]))"
return cell
}
func tableView(_ tableView: UITableView, trailingSwipeActionsConfigurationForRowAt indexPath: IndexPath) -> UISwipeActionsConfiguration? {
print("Got trailingSwipeActionsConfigurationForRowAt for row \(indexPath.row)")
return UISwipeActionsConfiguration(actions: getContextButtons("a title", "b title"))
}
func tableView(_ tableView: UITableView, leadingSwipeActionsConfigurationForRowAt indexPath: IndexPath) -> UISwipeActionsConfiguration? {
print("Got leadingSwipeActionsConfigurationForRowAt for row \(indexPath.row)")
return UISwipeActionsConfiguration(actions: getContextButtons("c title", "d title"))
}
func getContextButtons(_ titles: String...) -> [UIContextualAction] {
return titles.map { UIContextualAction(style: .normal, title: $0, handler: handler) }
}
}
该表在情节提要中定义为所有默认设置,单元格具有.Basic
样式和默认UITableViewCell类绑定。
在VoiceOver模式下使用列表时,似乎没有任何作用:
成功完成了对行的滑动,出于某种无法解释的原因,尽管在第四行进行了滑动,但是焦点仍跳回到了第一行(图像:https://ibb.co/rm9PTPS)
在重新导航到第四行(即,滑动行,图像:https://ibb.co/ZJk00h9)后,当导航到滑动操作按钮本身时,似乎它们的框架定义不清晰,屏幕在所有内容之外向右滚动(在这种情况下)太多,如此处所示:https://ibb.co/gyBFhJm
在相邻行之间来回导航至滑动行时,完全无法使用滑动操作按钮。
我真的很感谢任何对此有任何帮助的人,这些人肯定比我知道得多。 谢谢。