4

我的表格视图中的第一个单元格是一个虚拟单元格,因此,当旁白模式打开时,我想跳过该单元格,以便焦点不会到达该控件,因此,语音不会说出它的任何特征超过。我编写了粘贴在下面的代码来实现相同的目标,认为isAccessibilityElement仅此一项就足够了。但似乎并非如此。尽管我说这个元素在代码中是不可访问的,但它仍然通过Voice-over模式中的右/左轻弹来获得焦点。关于如何实现这一点的任何想法?

- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath
{
....
     UITableViewCell *cell = (UITableViewCell *)[tableView dequeueReusableCellWithIdentifier:MyIdentifier];
     if(indexPath.row == 0)
     {
          cell.isAccessibilityElement = 0;
     }
}
4

4 回答 4

2

使用一些自定义单元格,并在该单元格定义中实现:

- (NSInteger)accessibilityElementCount {
    NSIndexPath *indexPath = [(UITableView *)self.superview indexPathForCell: self];
    if(indexPath.row==0){
        return 0;
    }
    else{
        return 1;
    }
}
于 2012-10-30T19:00:10.543 回答
2

当前执行此操作的方法似乎是将accessibilityElementsHidden单元格设置为true/ YES(取决于使用 Swift 还是 Obj-C.

似乎比提出的其他答案更干净,并且在我非常简短的测试中似乎有效。

于 2016-06-13T12:45:29.287 回答
1

只需像这样覆盖单元格的功能accessibilityElementCount

斯威夫特 4.2:

override func accessibilityElementCount() -> Int {
   return 0
}
于 2021-02-16T13:01:16.837 回答
0

这并不理想,但您是否只能在未激活 VoiceOver 时显示单元格?您可以使用

UIAccessibilityIsVoiceOverRunning()

在您的应用程序加载时查看 VoiceOver 是否打开的功能,并注册

@selector(voiceOverStatusChanged)

通知,以便在用户启用或禁用画外音时通知您。有关这方面的更多信息,请参阅以下博客文章。< http://useyourloaf.com/blog/2012/05/14/detecting-voiceover-status-changes.html >

于 2012-10-30T14:38:51.360 回答