阻止声音(辅助功能)宣布UITableViewCell为选中状态

时间:2014-12-03 12:06:37

标签: ios uitableview accessibility voiceover uiaccessibility

当选择UITableViewCell时,语音通过“选择”,我不希望语​​音结束说“已选择”。我怎样才能做到这一点?

我尝试过的事情没有成功:

  • 更改了单元格accessibilityHintaccessibilityLabel
  • 更改了单元格selectionStyle = UITableViewCellSelectionStyleNone
  • 更改了单元格accessibilityTraits = UIAccessibilityTraitButton

问题:

  • 当选择单元格时,我不希望语​​音结束说“已选择”。我怎样才能做到这一点?

7 个答案:

答案 0 :(得分:11)

我问这是Apple的代码级支持问题,并得到了以下完美的解决方案。使用UITableViewCell的自定义子类覆盖accessibilityTraits,如下例所示:

class NoTraitCell: UITableViewCell {
    override var accessibilityTraits: UIAccessibilityTraits {
        get {
            return UIAccessibilityTraitNone
        }
        set {}
    }
}

答案 1 :(得分:0)

您可以尝试再次取消选择单元格:

- (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath 
{
 [tableView deselectRowAtIndexPath:indexPath animated:YES];
}

答案 2 :(得分:0)

您可以创建自定义单元格类并覆盖accessibilityTraits,如下所示:

- (UIAccessibilityTraits)accessibilityTraits {
     return UIAccessibilityTraitButton;
}

答案 3 :(得分:0)

如果您不打算使用tableview的选择功能,请不要使用tableView(_ tableView: UITableView, didSelectRowAt indexPath: IndexPath)。我知道我总是把它作为一个" didTapOnRowAt"方法,但更好的方法是使用willSelectRowAt

func tableView(_ tableView: UITableView, willSelectRowAt indexPath: IndexPath) -> IndexPath? {
    // code for when a row is tapped
    return nil
}

return nil表示单元格实际上未被选中。

答案 4 :(得分:0)

对我有用的是在accessibilityLabel上将单元格的" "设置为didSelectRow()(空字符串不起作用),触发重新加载,然后在accessibilityLabel上重置下一个出队。

答案 5 :(得分:-1)

您可以使用accessibilityElementsHidden属性来禁用语音辅助功能。

如果您不想在画外音模式中听到视图,请将accessibilityElementsHidden属性设为true,以获取该特定视图(documentation

在您的情况下,对于UITableViewCell,您可以在tableView(_:cellForRowAt:)方法中将其设置为true

func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell {
    // write code to create cell ....
    cell.accessibilityElementsHidden = true
    return cell
}

注意:您还可以在awakeFromNib()方法中为自定义类表视图单元格设置属性。

答案 6 :(得分:-3)

唯一的解决方法是阻止细胞选择

- (NSIndexPath *)tableView:(UITableView *)tableView willSelectRowAtIndexPath:(NSIndexPath *)indexPath;
{
    return nil;
}

在单元格上添加点击手势,当点击单元格时,在点按手势内的单元格选择中执行您想要的操作。

相关问题