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

时间:2014-05-23 08:22:37

标签: ios uitableview voiceover uiaccessibility

我有一个包含UITableViewController静态内容的故事板。单元格非常简单,只包含一个UILabel。如果我现在想要在其中一个单元格上禁用辅助功能,我只需取消选中标签上的标记即可。这可以按预期工作。

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

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

如何禁用自定义单元格的辅助功能?

3 个答案:

答案 0 :(得分:5)

也许,这种方式更容易。

cell.textLabel.accessibilityElementsHidden = YES;

Look this post

答案 1 :(得分: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

答案 2 :(得分:2)

在Swift中

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

在显示单元格(UITableViewCell)之前,必须将单元格的accessibilityElementsHidden属性设置为true。此属性指示是否隐藏辅助功能元素(在本例中为单元格)中包含的辅助功能元素。 <{1}}默认为accessibilityElementsHidden

在init()

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

true

在awakeFromNib()

如果只能从故事板或笔尖创建CustomTableViewCell,您可以在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()

在tableView(_:cellForRowAt:)

如果以编程方式创建单元格并将其出列,则代码如下所示:

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