如何禁用自定义静态UITableViewCell的可访问性

6
我有一个包含静态内容UITableViewController的故事板。这些单元格非常简单,只包含一个UILabel。如果我想在其中一个单元格上禁用辅助功能,我只需取消标签上的勾选即可。这按预期工作。
然而,如果我现在创建一个空的UITableViewCell子类,并将其用作我的静态单元格的单元格类,则将启用辅助功能,忽略所有设置。
我尝试重写-isAccessibilityElement以返回NO,以编程方式将所有子视图的accessibilityElement属性设置为NO,但仍然可以使用VoiceOver选择。内容不会被VoiceOver读取,只有一个单一的“ ”似乎存在(当在此元素上向上/向下滑动时可以听到)。
我需要做什么才能禁用自定义单元格的辅助功能?
3个回答

12

或许,这种方式更容易一些。

cell.textLabel.accessibilityElementsHidden = YES;

看看这篇文章

;)


1
我会在单元格本身上设置 accessibilityElementsHidden 属性。你甚至可以使用用户定义的运行时属性在 Interface Builder 中完成它。 - Ilya

3

好的,我找到了一个解决方案,虽然我对它并不是很满意。

要禁用单元格作为辅助功能元素,您需要将其转换为没有任何元素的辅助功能容器:

@implementation CustomCell

- (BOOL)isAccessibilityElement {
    return NO; // prerequisite for being an accessibility container
}

- (NSInteger)accessibilityElementCount {
    return 0; // hack to disable accessibility for this cell
}

- (id)accessibilityElementAtIndex:(NSInteger)index {
    return nil;
}

- (NSInteger)indexOfAccessibilityElement:(id)element {
    return NSNotFound;
}

@end

3

在Swift中

* 示例代码是Swift 3,但设置accessibilityElementsHidden的重要代码行不特定于Swift 3。

在显示单元格(UITableViewCell)之前,您必须将单元格的 accessibilityElementsHidden 属性设置为true 。此属性指示是否隐藏包含在可访问性元素内部的可访问性元素(在本例中为单元格)。 accessibilityElementsHidden 默认情况下为false

在init()内

以下代码将在自定义UITableViewCell子类的初始化中设置 accessibilityElementsHidden true 。如果单元格由storyboard、nib或以编程方式创建,则会起作用。

class CustomTableViewCell: UITableViewCell {

    override init(style: UITableViewCellStyle, reuseIdentifier: String?) {
        super.init(style: UITableViewCellStyle.default, reuseIdentifier: reuseIdentifier)
        self.accessibilityElementsHidden = true
    }

    required init?(coder aDecoder: NSCoder) {
        super.init(coder: aDecoder)
        self.accessibilityElementsHidden = true
    }
}

在 awakeFromNib() 中

如果 CustomTableViewCell 只会从 storyboard 或 nib 文件中创建,你可以在 awakeFromNib() 中设置属性。

class CustomTableViewCell: UITableViewCell {
    override func awakeFromNib() {
        self.accessibilityElementsHidden = true
    }
}

在tableView(_:cellForRowAt:)方法中

如果您正在以编程方式创建和出列单元格,则代码如下所示:

func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell {

    // ... code that creates or dequeues the cell

    cell.accessibilityElementsHidden = true

    return cell
}

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接