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

如何通过VoiceOver触发SwiftUI List的onDelete操作?

SwiftUI List编辑模式下onDelete的VoiceOver无障碍支持

默认SwiftUI List编辑模式中的红色删除圆圈无法被VoiceOver识别,想要解决这个问题,最直接可靠的方式是自定义删除控件并添加无障碍属性,具体实现如下:

实现思路

  1. 根据编辑模式状态,在列表行内显示自定义删除按钮,替代默认的不可访问删除附件
  2. 给按钮添加无障碍标签与动作绑定,确保VoiceOver能识别并触发删除操作
  3. 保留原有的onDelete修饰符,兼容普通用户的滑动删除习惯

完整代码示例

struct AccessibleDeleteListView: View {
    @State private var listItems = ["项目1", "项目2", "项目3", "项目4"]
    @Environment(\.editMode) private var editMode
    
    var body: some View {
        NavigationStack {
            List {
                ForEach(listItems, id: \.self) { item in
                    HStack {
                        Text(item)
                        // 编辑模式下展示自定义删除按钮
                        if editMode?.wrappedValue == .active {
                            Button(action: {
                                guard let index = listItems.firstIndex(of: item) else { return }
                                listItems.remove(at: index)
                            }) {
                                Image(systemName: "minus.circle.fill")
                                    .foregroundColor(.red)
                            }
                            // 无障碍标签:告知VoiceOver用户按钮功能
                            .accessibilityLabel("删除\(item)")
                            // 无障碍动作:绑定删除逻辑,支持VoiceOver触发
                            .accessibilityAction(named: "删除") {
                                guard let index = listItems.firstIndex(of: item) else { return }
                                listItems.remove(at: index)
                            }
                        }
                    }
                }
                // 保留滑动删除功能
                .onDelete(perform: deleteItems)
            }
            .navigationTitle("无障碍列表")
            .toolbar {
                EditButton()
            }
        }
    }
    
    private func deleteItems(at offsets: IndexSet) {
        listItems.remove(atOffsets: offsets)
    }
}

关键说明

  • 自定义按钮会被VoiceOver正常识别,滑动无障碍元素时不会被跳过
  • accessibilityLabel提供清晰的语音提示,让用户明确按钮作用
  • 同时保留两种删除方式,兼顾不同用户群体的操作习惯

内容的提问来源于stack exchange,提问作者Kuba

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.29 10:27:17