【问题标题】:Custom UITableViewCell trouble with UIAccessibility elementsUIAccessibility 元素的自定义 UITableViewCell 问题
【发布时间】:2010-11-09 02:13:44
【问题描述】:

无论我尝试什么,我都无法阻止我的自定义 UITableViewCell 在 UIAccessiblity 的默认规则下像它应该的那样。我不希望这个单元格像一个可访问性容器(本身),所以按照这个guide我应该能够让我所有的子视图都可以访问,对吧?!它说要使每个元素都可以单独访问,并确保单元格本身不可访问。

- (BOOL)isAccessibilityElement
{
    return NO;
}

- (NSString *)accessibilityLabel
{
    return nil;
}

- (NSInteger)accessibilityElementCount
{
    return 0;
}


- (id)initWithStyle:(UITableViewCellStyle)style reuseIdentifier:(NSString *)reuseIdentifier //cells use this reusage stuff
{
    if (self = [super initWithStyle:style reuseIdentifier:reuseIdentifier]) 
    {
        [self setIsAccessibilityElement:NO];
        sub1 = [[UILabel alloc] initWithFrame:CGRectMake(0,0,1,1)];
        [sub1 setAccessibilityLanguage:@"es"];
        [sub1 setIsAccessibilityElement:YES];
        [sub1 setAccessibilityLabel:sub1.text]

        sub2 = [[UILabel alloc] initWithFrame:CGRectMake(0,0,1,1)];
        [sub2 setAccessibilityLanguage:@"es"];
        [sub2 setIsAccessibilityElement:YES];
        [sub2 setAccessibilityLabel:sub2.text]

语音系统会同时读取整个单元格的内容,即使我正试图阻止这种行为。我可以说

        [sub2 setIsAccessibilityElement:NO];

但这会使这个元素完全不可读。我想让它保持可读性,但不要将整个单元格视为一个容器(并假定为英语)。似乎没有很多关于这方面的信息,所以至少我想记录一下。

【问题讨论】:

  • 你知道它是否通过子视图递归吗?
  • 如果您将IsAccessibilityElement 设置为YES 是否说明了一切?

标签: iphone objective-c uitableview


【解决方案1】:

如果您有 2 个单独的元素(sub1sub2),您可以覆盖 UIAccessibilityContainer 非正式协议的方法。

- (NSInteger)accessibilityElementCount {
    return 2;
}

- (id)accessibilityElementAtIndex:(NSInteger)index {
    if (index == 0) {
        return sub1;
    } else if (index == 1) {
        return sub2;
    }
    return nil;
}

- (NSInteger)indexOfAccessibilityElement:(id)element {
    if (element == sub1) {
        return 0;
    } else if (element == sub2) {
        return 1;
    }
    return NSNotFound;
}

【讨论】:

  • lub 你,你太棒了:)
  • indexOfAccessibilityElement: 中的最后一个 return 0; 应该是:return NSNotFound;
【解决方案2】:

在 iOS 8 或更新版本中,可以简单地设置 accessibilityElements 属性:

// A list of container elements managed by the receiver.
// This can be used as an alternative to implementing the dynamic methods.
@available(iOS 8.0, *)
public var accessibilityElements: [AnyObject]?

【讨论】:

    猜你喜欢
    • 2011-11-04
    • 2013-02-26
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多