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

SwiftUI中如何通过按钮实现ForEach循环内多条文本的复制与共享

实现方案

你的需求可以直接在SwiftUI中实现,无需额外依赖,首先有两处前置提示:

  1. 你原有代码的ListDataArray结构体存在语法错误(初始化参数缺逗号、多余闭合括号),请先修正后再使用以下代码
  2. 你原有代码导入的MobileCoreServices框架在当前需求下不需要用到,无其他依赖的话可以移除

1. 核心逻辑说明

每个ButtonView已经持有对应条目的data实例,直接将该实例的cities、name1、name2属性按你需要的格式拼接后,分别写入系统粘贴板(复制)、传入共享组件(共享)即可。

完整修改后的ButtonView代码

struct ButtonView: View {
    let data: DataArray
    // 拼接你需要复制/共享的文本内容,格式可自定义调整
    private var allContent: String {
        """
        城市:\(data.cities)
        联系人1:\(data.name1)
        联系人2:\(data.name2)
        """
    }
    
    // 兼容iOS15及更低版本共享面板用的状态变量
    @State private var showShareSheet = false
    
    var body: some View {
        HStack {
            // 复制按钮
            Button(action: {
                // 将拼接好的内容写入系统全局粘贴板
                UIPasteboard.general.string = allContent
                // 可自行添加复制成功的交互提示,比如弹出Toast、震动反馈等
            }) {
                Text("COPY")
            }
            
            Spacer()
            
            // iOS16及以上直接用原生ShareLink,代码更简洁
            if #available(iOS 16.0, *) {
                ShareLink(item: allContent) {
                    Text("SHARE")
                }
            } else {
                // iOS15及更低版本,用封装的UIKit共享组件
                Button(action: {
                    showShareSheet = true
                }) {
                    Text("SHARE")
                }
                .sheet(isPresented: $showShareSheet) {
                    ActivityView(activityItems: [allContent])
                }
            }
        }
    }
}

// 兼容低版本的共享面板封装,无需修改直接使用即可
struct ActivityView: UIViewControllerRepresentable {
    var activityItems: [Any]
    var applicationActivities: [UIActivity]? = nil
    
    func makeUIViewController(context: Context) -> UIActivityViewController {
        return UIActivityViewController(
            activityItems: activityItems,
            applicationActivities: applicationActivities
        )
    }
    
    func updateUIViewController(_ uiViewController: UIActivityViewController, context: Context) {}
}

可选扩展方案

如果需要实现更复杂的复制/共享需求,可以参考以下实现:

  • 需要复制带字体、颜色等样式的富文本时,可将内容拼接为NSAttributedString后写入粘贴板,同时支持设置粘贴内容的有效时长、是否允许跨设备接力等属性
  • 需要支持批量选择多个条目复制/共享时,可给DataArray添加isSelected选中状态标识,用户选择完成后拼接所有选中条目的内容,再执行写入粘贴板/共享操作

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.27 06:54:04