我尝试访问子视图中的元素,但发现无法执行此操作。
层次结构为:
视图控制器:
- 检视
- 临时视图
- 用户输入视图
- 压缩代码已输入
我想访问zipCodeEntered文本字段。我在它上面有一个名为“zipCodeEntered”的可访问性标签。
当我尝试记录自动化时,它只注册了超级视图“userEnterView”,而不是我可以点击的实际文本字段。
我打印“app.otherElements[SUPER_VIEW_NAME].debugDescription”以查看层次结构中有哪些元素,但它没有打印任何元素。
关于为什么我无法访问这些元素/我如何才能访问它们,您有什么想法吗?x1c 0d1x
3条答案
按热度按时间jbose2ul1#
子视图不可访问,因为父视图不是容器视图。从辅助功能编程指南的Making Your iOS App Accessible部分:
从可访问性的Angular 来看,自定义视图可以是单独的视图,也可以是容器视图。单独的视图不包含任何其他需要可访问的视图。
另一方面,容器视图包含用户可以与之交互的其他元素。
要使子视图可访问,父视图应该通过从
-isAccessibilityElement
返回NO并实现UIAccessibilityContainer
协议的方法来告诉UIAccessibility
它是一个可访问性容器。fkaflof62#
修复它的事情是为我检查√的“可访问性”框启用在界面生成器。
如果无法在IB中工作,请尝试将视图的
isAccessibilityElement
属性设置为true。希望这对你有帮助!
ddarikpa3#
我在UITableView中也遇到了这个问题。我的单元格有一个containerView(UIView),它有子视图(TextView,UIButton...)和一个带有单元格的collectionView。
我尝试了可接受的答案,但它不起作用。(UI记录器或手动代码无法识别我的子元素)。但有时我发现,当我触发某个东西来刷新表时,UITest突然识别出了我的子元素。
因此,现在我知道如果UITest找不到我的子视图,我就调用
tableView.reloadData
来刷新视图,然后所有问题都解决了。不管怎么说,这只是一个变通办法,希望苹果能尽快修复。