当前位置: 首页 > 面试题库 >

如何在“行的滑动操作配置”中为VoiceOver添加可访问性标签?

杜浩壤
2023-03-14
问题内容

我正在使用Swift 4创建一个iOS应用,并且没有在使用Storyboards。要从Table View
Controller中删除行,用户向左滑动该行,然后单击Delete按钮。

这是我用来实现该代码的代码(未使用任何外部库):

override func tableView(_ tableView: UITableView, trailingSwipeActionsConfigurationForRowAt indexPath: IndexPath) -> UISwipeActionsConfiguration? {
    self.isAccessibilityElement = true
    self.accessibilityLabel = "Delete row"


    let deleteAction = UIContextualAction(style: .normal , title: "DELETE") { (action, view, handler) in

        self.removeRowFromMyList(indexPath: indexPath.row)

        MyListController.stations.remove(at: indexPath.row)
        self.tableView.deleteRows(at: [indexPath], with: .automatic)

        self.tableView.setEditing(false, animated: true)
        self.tableView.reloadData()
    }
    let swipeAction = UISwipeActionsConfiguration(actions: [deleteAction])
    swipeAction.performsFirstActionWithFullSwipe = false

    return swipeAction
}

我确实检查了其他问题,但没有一个解决。对于解决此问题所需的其他信息,请随时在此处评论。谢谢 :)


问题答案:

使用Apple的UIAccessibility中的辅助功能自定义操作

您只需要设置辅助功能定义操作:

cell.accessibilityCustomActions = [UIAccessibilityCustomAction(name: "Delete", target: self, selector: #selector(theCustomAction))]


@objc private func theCustomAction() -> Bool {
    //Do anything you want here
    return true
}

更新:

因此,我确实重新创建了该项目,但是这次我使用的是Storyboards(不是最后一次),我从Cocoapods导入了SwipeCellKit库,并遵循了他们的文档,VoiceOver在删除indexPath.row中的单元格方面工作得很好。没问题。



 类似资料:
  • 我有以下代码: 在这部分代码中: 如果存在过滤器,则将过滤器应用于流; 想要对此流进行一些偏移和限制,但这不起作用,因为“应该只对一个流进行一次操作(调用中间或终端流操作)”。 映射到dto对象并收集为列表。 如何以其他方式进行流操作skip()和limit()。提前感谢。

  • 滑动操作列表是列表的扩展,它提供滑动操作的功能,滑动列表元素可以展现隐藏的功能菜单,就像滑动删除一样。 让我们来看一下滑动列表元素的布局结构: <div class="list-block"> <ul> <!-- li上额外的“swipeout”类 --> <li class="swipeout"> <!-- 被“swipeout-content”包裹起来的普通列表

  • 我有一个Spark DataFrame,我正在尝试基于以前的列创建一个新列,但对我来说,困难的是我已经按行计算了列的值。例如: 列1 |列2 |列3 1 | 2 | 3 4|5|0 3 | 1 | 1 因此,我想要一个新列,每行具有表达式 max(col1, col2, col3)的列名。所以,所需的输出: Col1 |Col2 |Col3 |Col4 1|2|3|'col3' 4|5|0|'co

  • 你知道 Puppet 能做微创手术吗? 通常,我们不希望将整个配置文件交由 Puppet 管理而仅仅是在配置文件中添加某项设置 — 尤其是如果该文件是由别人管理,我们不能覆盖它的情况。 一种简单而有用的方法是,如果配置文件中不存在指定的行就添加这行配置。例如: 添加一个内核模块名到配置文件 /etc/modules 告知内核在启动时加载此模块。 你可以使用一个 exec 资源达成此任务。下面的例子

  • 我有一个问题,我真的不知道如何在JavaFX中将多行添加到Label中。 例如: 因此,当循环结束时,标签仅显示最终值9。 因此,任何可以显示所有数字1-9并在它们之间加上断线(例如'\n')的解。 当我想显示包含许多菜肴的项目账单时,会出现这个问题。谢谢你的帮助。

  • 我有一个带有按钮的JFrame。当用户按下按钮时,将执行一系列耗时的操作。我在表格上有一个JLabel,上面写着“请稍候”,我想在执行操作时变得可见,然后在完成时变得不可见。因此,我将放在动作侦听器的开头,放在末尾,但没有任何反应。 似乎标签的显示正在排队,直到操作完成,所以它只是可见,然后立即不可见。在继续操作侦听器中的其余代码之前,如何确保标签变为可见?