6

我有一个包含UITableViewController静态内容的故事板。这些单元格非常简单,仅包含一个UILabel. 如果我现在想禁用其中一个单元格的可访问性,我只需取消选中标签上的标记。这按预期工作。

但是,如果我现在创建一个空的子类UITableViewCell并将其用作我的静态单元格的单元格类,则将启用可访问性,而忽略所有设置。

我尝试覆盖-isAccessibilityElementreturn NO,以编程方式将所有子视图accessibilityElement属性设置为NO,但在使用 VoiceOver 时它仍然可以选择。VoiceOver 不会读取内容,似乎只有一个“ ”(在此元素上向上/向下滑动时可以听到)。

我需要做什么来禁用自定义单元格的可访问性?

4

3 回答 3

12

也许,这种方式更容易。

cell.textLabel.accessibilityElementsHidden = YES;

看这个帖子

;)

于 2015-03-06T13:15:39.863 回答
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
于 2014-05-23T11:55:07.573 回答
3

在斯威夫特

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

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

在 init() 内

以下代码将accessibilityElementsHidden true在自定义 UITableViewCell 子类中设置初始化。如果单元格是由故事板、笔尖创建或以编程方式创建的,这将起作用。

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() 内

如果仅从情节提要或 nib 创建 CustomTableViewCell,则可以在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
}
于 2017-01-06T03:17:26.567 回答