首页 > 解决方案 > 如何在 SwiftUI ForEach 内容中保持多个按钮操作分开?

问题描述

我有一个带有复选框、标题和计时器图标的项目列表:

在此处输入图像描述

复选框是一个按钮,计时器图标是一个按钮,具有与之关联的独特操作。但是,如果我点击单元格内的任何位置,它会同时触发两个按钮操作。旨在使它们彼此独立运行,并且与单元中的分接头一样独立运行。如何修改以下代码以保持操作分开?

List {
      ForEach(tasks, id: \.self) { task in
            HStack {

                Button(action: {
                    task.isComplete.toggle()
                    try? self.moc.save()
                    print("Done button tapped")
                }) {
                    Image(systemName: task.isComplete ? "square.fill" : "square")
                }
                .padding()

                Text(task.name ?? "Unknown Task")
                Spacer()

                Button(action: {
                    print("timer button tapped")
                }) {
                    Image("timer")
                }    
            }
        }
        .onDelete(perform: deleteTask)
    }

标签: listbuttonforeachswiftui

解决方案


这是 List 的默认行为,它在行中识别 Button 并使整行处于活动状态,.onTapGesture如下所示使用

List {
      ForEach(tasks, id: \.self) { task in
            HStack {

                Image(systemName: task.isComplete ? "square.fill" : "square")
                .padding()
                .onTapGesture {
                    task.isComplete.toggle()
                    try? self.moc.save()
                    print("Done button tapped")
                }

                Text(task.name ?? "Unknown Task")
                Spacer()

                Image("timer")
                .onTapGesture {
                    print("timer button tapped")
                }    
            }
        }
        .onDelete(perform: deleteTask)
    }

推荐阅读