SwiftUI文本组设置AccessibilityIdentifier并保留子文本标识的方法
问题描述
示例代码:
HStack { Text("Hello") .accessibilityIdentifier("first_word") Text(" ") Text("World!") .accessibilityIdentifier("second_word") } // 此处想要添加"phrase_identifier",但会覆盖"first_word"和"second_word"标识
能否创建phrase_identifier以获取完整文本“Hello World!”,同时仍可通过first_word获取“Hello”、second_word获取“World!”?
更新说明
此前有方案被提出,但该方案仅生成标识组,无法通过phrase_identifier获取对应值、用户输入标签或标签内容。
相关界面展示
- 辅助功能检查器界面:显示当前HStack的可访问元素仅包含两个子Text元素,没有整体的可访问标识。
- 实际界面效果:展示了“Hello World!”文本由三个Text组件拼接而成的显示状态。
解决方案
直接给HStack添加辅助功能容器修饰符,同时保留子元素的可访问性属性即可实现需求:
HStack { Text("Hello") .accessibilityIdentifier("first_word") Text(" ") Text("World!") .accessibilityIdentifier("second_word") } .accessibilityElement(children: .contain) .accessibilityLabel("Hello World!") .accessibilityIdentifier("phrase_identifier")
关键说明
.accessibilityElement(children: .contain):将父视图标记为可访问元素,但保留所有子元素的可访问性属性,不会覆盖子元素的accessibilityIdentifier。.accessibilityLabel("Hello World!"):设置整体的辅助功能标签,确保通过phrase_identifier能获取到完整文本内容。- 子元素的
first_word和second_word标识依然完全有效,可正常获取对应文本。
如果子文本是动态生成的,可通过闭包形式动态拼接整体标签:
HStack { let firstText = "Hello" let secondText = "World!" Text(firstText) .accessibilityIdentifier("first_word") Text(" ") Text(secondText) .accessibilityIdentifier("second_word") } .accessibilityElement(children: .contain) .accessibilityLabel { Text(firstText + " " + secondText) } .accessibilityIdentifier("phrase_identifier")
这样既实现了整体标识的需求,又保留了子元素的独立标识,同时能通过phrase_identifier获取完整文本。
内容的提问来源于stack exchange,提问作者Konstantin.Efimenko
相关产品推荐
相关产品推荐

