代码之家  ›  专栏  ›  技术社区  ›  ojreadmore

UIAccessibility元素的自定义UITableViewCell问题

  •  8
  • ojreadmore  · 技术社区  · 14 年前

    不管我怎么做,我都不能阻止我的自定义UITableViewCell继续工作 就像它应该做的那样 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];
    

    但这将使这个元素完全不可读。我想保持它的可读性,但不是把整个单元格当作一个容器(假设是英语)。在这方面似乎没有太多的信息,所以至少我想把它记录下来。

    2 回复  |  直到 14 年前
        1
  •  12
  •   johankj    10 年前

    如果你有两个独立的元素( sub1 sub2 ),可以重写 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;
    }
    
        2
  •  1
  •   Rudolf Adamkovič    8 年前

    在iOS8或更高版本中,可以简单地设置 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]?