【问题标题】:SwuiftUI check mark single rowSwiftUI 复选标记单行
【发布时间】:2020-10-30 23:34:56
【问题描述】:

在我的 SwiftUi 项目中,我在表单中列出了一些数据,我想让用户能够通过点击操作选择列表中的单个项目(列表中不能选择多个)

在下面的代码中我创建了一个列表:

List {
 ForEach(listOfCycle, id: \.self) {db in
      dbList(db: db, ciclo: self.$cycleSelected)
       }
 }

对于每一行我都有视图 dbList

import SwiftUI

struct dbList: View {
    @State var db : Cycle
    @Binding var ciclo : Cycle?
    @State var cicloSelected : Bool = false
    
    var body: some View {
        HStack{
            Text("Database:")
            Spacer()
            Text(db.idDatabaseAirports ?? "").foregroundColor(self.cicloSelected ? .green: .black).font(self.cicloSelected ? .title : .body)
            if self.cicloSelected {
                Image(systemName: "checkmark.circle")
            }
        }.onTapGesture {
            self.cicloSelected.toggle()
            self.ciclo = self.db
            
        }
    }
}

逻辑工作,但用户可以点击多行并选择多个,在我的项目中,我必须将复选标记只放在一行上,一次不能超过一个。

有什么办法可以避免多选。

非常感谢

【问题讨论】:

  • 有一个和你类似的系统,但是我的 onTapGesture 只对文本的点击有反应,在 Spacer 区域,你有这种问题吗?

标签: arrays swift xcode list swiftui


【解决方案1】:

提供的代码是不可测试的,所以只是想法(有点粗糙,但应该清楚)。

注意:确保Cycle 是平等的

struct dbList: View {
    @State var db : Cycle
    @Binding var ciclo : Cycle?
    
    var body: some View {
        HStack{
            Text("Database:")
            Spacer()
            Text(db.idDatabaseAirports ?? "").foregroundColor(self.db == self.cyclo ? .green: .black).font(self.cicloSelected ? .title : .body)
            if self.db == self.cyclo {
                Image(systemName: "checkmark.circle")
            }
        }.onTapGesture {
            self.ciclo = self.db
            
        }
    }
}

【讨论】:

    猜你喜欢
    • 2020-01-25
    • 2021-08-09
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-10-17
    • 2021-06-02
    • 1970-01-01
    相关资源
    最近更新 更多