gridView中的UIAccessibility - 没有看到新的单元格

时间:2016-08-07 14:13:02

标签: ios objective-c voiceover uiaccessibility

在我的项目中我有tableView,作为一行有一个自定义的UITableViewCell,它有一个属性--GMGridView(它类似于UICollectionView),它有它的委托方法:

- (GMGridViewCell *)GMGridView:(GMGridView *)gridView cellForItemAtIndex:(NSInteger)index {
GMGridViewCell *cell = [gridView dequeueReusableCell];

    if (!cell)
    {
        cell = [[GMGridViewCell alloc] initWithFrame:CGRectMake(0, 0, size.width, size.height)];
        cell.contentView = [[GridViewContentView alloc] initWithFrame:cell.frame style:GridViewStyleNews];
     }
    Item *feed = _contentArray[index];
       GridViewContentView *contentView = (GridViewContentView *)cell.contentView;
           contentView.textLabel.text = feed.textLabel;
    [contentView.imageView setURL:[NSURL URLWithString:feed.imageLink] withPreset:self.preset];
    cell.contentView = contentView;
    NSLog(@"Address index %d - %p:", index, cell);
        return cell;
}

在此阶段 - 创建自定义contentView -GridViewContentView并将其标识为单元格contentView。

此自定义内容视图在其中定义为Accessible,有下一个方法:

 - (BOOL)isAccessibilityElement {
    return YES;
}

- (NSString *)accessibilityLabel {
    return [NSString stringWithFormat:@"%p, %@", self.superview, self.textLabel.text];
}

在我的情况下,我在GridView中有19个项目。

所以当在iPad上加载tableView(在横向上)创建了6个项目时,它们被插入到GridView内部的NSArray中:

2016-08-07 17:04:39.626 DummyAccessibility[2785:230602] Address index 0 - 0x7a0162e0:
2016-08-07 17:04:39.632 DummyAccessibility[2785:230602] Address index 1 - 0x797390e0:
2016-08-07 17:04:39.633 DummyAccessibility[2785:230602] Address index 2 - 0x79643db0:
2016-08-07 17:04:39.639 DummyAccessibility[2785:230602] Address index 3 - 0x7a013290:
2016-08-07 17:04:39.640 DummyAccessibility[2785:230602] Address index 4 - 0x7a0114f0:
2016-08-07 17:04:39.641 DummyAccessibility[2785:230602] Address index 5 - 0x7965ef30:

和Voice over告诉正确的文字 - 属于录音项目。 但是当我滚动时 - 另外创建了下两个项目(6和7),并且前两个项目被重新用于项目(8和9)。 新项目:

2016-08-07 17:04:59.961 DummyAccessibility[2785:230602] Address index 6 - 0x79674ac0:
2016-08-07 17:05:00.366 DummyAccessibility[2785:230602] Address index 7 - 0x7a074f20:

重复使用的项目:

2016-08-07 17:05:00.982 DummyAccessibility[2785:230602] Address index 8 - 0x7a0162e0:
2016-08-07 17:05:05.704 DummyAccessibility[2785:230602] Address index 9 - 0x797390e0:

调试后,我发现UIAccessibility从未接受过这些新项目。当我尝试点击它时 - VoiceOver告诉 - 重定向到单元格内部(编号5)并从中获取textValue。 因此,当我尝试点击重用的项目时 - 它告诉正确(重用的textInfo)。这种情况(这些新项目在重新使用时保持均匀)。我无法理解为什么会这样。 item number 6 that Voice Over doesn't see

我花了很多时间,但不能理解它为什么会这样。我真的很感激任何想法。

提前多多感谢。

1 个答案:

答案 0 :(得分:0)

我在Sean Howell的基础上找到了解决方案 iOS Accessibility for CollectionView in a TableViewCell

所以我在自定义tableViewCell中添加了额外的属性 - UIView,

然后添加到它 - 在我的情况下 - GMGridView。

    self.trickView = [[UIView alloc]initWithFrame:self.bounds];
    self.trickView.backgroundColor = [UIColor clearColor];
    self.trickView.autoresizingMask = UIViewAutoresizingFlexibleWidth | UIViewAutoresizingFlexibleHeight;

    _trickView.accessibilityElements = @[gmGridView];
    [self.contentView addSubview:_trickView];
    [self.gridView removeFromSuperview];
    self.gridView = nil;
    self.gridView = gmGridView;
    [self.trickView addSubview:gmGridView];