gridView 中的 UIAccessibility - 看不到新单元格

UIAccessibility in gridView - doesn't see new cells

在我的项目中,我有 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。

此自定义内容视图被定义为可访问,其中有以下方法:

 - (BOOL)isAccessibilityElement {
    return YES;
}

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

在我的例子中,我在 GridView 中有 19 个项目。

因此,当 tableView 加载到 iPad(横向)时创建了 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:

并且画外音告诉正确的文本 - 属于录音项目。 但是当我滚动时 - 另外创建了接下来的 2 个项目(6 和 7),而第一个 2 - 被重新用于项目(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)内重定向并从中获取文本值。 因此,当我尝试点击重复使用的项目时 - 它告诉我正确(重复使用的 textInfo)。这样的情况(这些新物品即使在被重复使用时也保持不变)。我不明白为什么会这样。

我花了很多时间在上面,但不明白为什么它会那样工作。我真的很感激任何想法。

非常感谢。

我在这里找到了基于 Sean Howell 回答的解决方案

所以我在我的自定义 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];