VoiceOver辅助功能不适用于OOB UITableView滑动操作

时间:2019-09-16 14:40:24

标签: swift uitableview swipe voiceover

我一直在努力使使用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模式下使用列表时,似乎没有任何作用:

  1. 成功完成了对行的滑动,出于某种无法解释的原因,尽管在第四行进行了滑动,但是焦点仍跳回到了第一行(图像:https://ibb.co/rm9PTPS

  2. 在重新导航到第四行(即,滑动行,图像:https://ibb.co/ZJk00h9)后,当导航到滑动操作按钮本身时,似乎它们的框架定义不清晰,屏幕在所有内容之外向右滚动(在这种情况下)太多,如此处所示:https://ibb.co/gyBFhJm

  3. 在相邻行之间来回导航至滑动行时,完全无法使用滑动操作按钮。

我真的很感谢任何对此有任何帮助的人,这些人肯定比我知道得多。 谢谢。

1 个答案:

答案 0 :(得分:0)

如XLE_22所指出的那样,滑动操作应按照其link在VoiceOver模式下用作“其他操作”。

我不知道要把您的答案标记为正确答案,所以我投票赞成,谢谢!