GridView中的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; } 

在这个阶段 – 创build自定义contentView -GridViewContentView,并以单元格contentView身份。

这个自定义内容视图被定义为可访问的内部有下面的方法:

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

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

所以当tableView加载到iPad上(横向)创build了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(语音结束)会告诉正确的文本 – 属于录音的项目。 但是,当我滚动 – 另外创build下两个项目(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: 

debugging后,我发现这些新的项目从来不被UIAccessibility所接受。 当我尝试点击它时 – VoiceOver告诉 – 被redirect到单元格内部(编号5),并从中获取textValue。 所以当我尝试点击重用的项目时,它会告诉正确的(重用的textInfo)。 这种情况(这些新的项目,即使他们也被重用)。 我不明白为什么这样。 项目编号6 Voice Over看不到

我花了很多时间,但不明白为什么这样工作。 我真的很感激任何想法。

非常感谢。

我在Sean Howell的基础上find了解决scheme在这里回答iOS中对TableViewCell中的CollectionView的可访问性

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

然后添加到它 – 在我的情况下 – 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];