You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.07 02:38:26