网格内的多选-SwiftUI

网格内的多选-SwiftUI,swiftui,Swiftui,我试图在动态网格中实现多重选择。 通过这段代码,它以图形方式选择所有元素,基本上它们都会改变颜色。它保存所选数据中的数据,但从图形上看,这些数据都已选定,并且我不能一次选择和保存多个数据。 我认为问题可能在于网格,但我也尝试用其他库来更改网格,但它没有改变任何东西。 以前我只是一个数组,它可以工作,现在从数据库中获取数据,它不是 我仍然在使用而且必须使用swiftui 1,所以我没有新swiftui中提供的网格 我将这个库用于网格,模块化网格,因为我有来自数据库的事件 谢谢 struct Ite

我试图在动态网格中实现多重选择。 通过这段代码,它以图形方式选择所有元素,基本上它们都会改变颜色。它保存所选数据中的数据,但从图形上看,这些数据都已选定,并且我不能一次选择和保存多个数据。
我认为问题可能在于网格,但我也尝试用其他库来更改网格,但它没有改变任何东西。 以前我只是一个数组,它可以工作,现在从数据库中获取数据,它不是

我仍然在使用而且必须使用swiftui 1,所以我没有新swiftui中提供的网格

我将这个库用于网格,模块化网格,因为我有来自数据库的事件

谢谢

struct ItemsEventSelectionView: View {

@ObservedObject var eventItems = getEventItems()

@State var eventSelections = [EventItem]()

@State var style2 = ModularGridStyle(.vertical, columns: .min(70), rows: .fixed(40))

@EnvironmentObject var globalDataObservableObject: GlobalDataObservableObject
    
var body: some View {
    ZStack(alignment: Alignment(horizontal: .center, vertical: .top)) {
        Group {
            Rectangle()
                .fill(UIManager.bgGradient)
                .frame(minWidth: 0, maxWidth: .infinity)
                .edgesIgnoringSafeArea(.all)
        }
        
        VStack(alignment: .leading) {
            
            
            
            ScrollView(self.style2.axes) {
                
                Grid(self.eventItems.events) { event in
                    
                    HStack {
                        MultipleSelectionEvent(title: event.name!, isSelected: self.eventSelections.contains(event)) {
                            
                            
                            if self.eventSelections.contains(event) {
                                self.eventSelections.removeAll(where: { $0 == event })
                            }
                            else {
                                self.eventSelections.append(event)
                            }
                        }
                    }
                }
                
            }.gridStyle(self.style2)
        }
    }

}
}




struct MultipleSelectionEvent: View {
var title: String
var isSelected: Bool
var action: () -> Void

var body: some View {
    Button(action: self.action) {
        HStack{
            
            if self.isSelected {
                
                
                Text(self.title)
                    .font(UIManager.einaBodySemibold)
                    .foregroundColor(UIManager.hBlue)
                    
                    
                    .padding(.vertical, 7)
                    .padding(.horizontal, 10)
                    .background(UIManager.hBlueLight)
                    .cornerRadius(6)
                
            } else {
                
                Text(self.title)
                    .font(UIManager.einaBody)
                    .foregroundColor(UIManager.hDarkBlue)
                    .padding(.vertical, 7)
                    .padding(.horizontal, 10)
                    .background(UIManager.hLightGrey)
                    .cornerRadius(6)
            }
        }
    }
}
}



class getEventItems : ObservableObject {

let didChange = PassthroughSubject<getEventItems,Never>()

@Published var events = [EventItem]() {
    didSet {
        didChange.send(self)
    }
}

func getEventItems() {
    
    EventItemViewModel().fetchEvents(complete: { (eventItems) in
        self.events = eventItems
    })
    
}

init() {
    getEventItems()
}

}
struct ItemsEventSelectionView:View{
@ObservedObject var eventItems=getEventItems()
@状态变量eventSelections=[EventItem]()
@State var style2=ModularGridStyle(.vertical,列:.min(70),行:.fixed(40))
@环境对象变量GlobalDataObserveObject:GlobalDataObserveObject
var body:一些观点{
ZStack(对齐:对齐(水平:中心,垂直:顶部)){
团体{
矩形()
.fill(UIManager.bgGradient)
.frame(最小宽度:0,最大宽度:无穷大)
.edgesIgnoringSafeArea(.all)
}
VStack(对齐:。前导){
ScrollView(self.style2.axes){
网格(self.eventItems.events){event in
HStack{
MultipleSelectionEvent(标题:event.name!,isSelected:self.eventSelections.contains(事件)){
如果self.eventSelections.contains(事件){
self.eventSelections.removeAll(其中:{$0==event})
}
否则{
self.eventSelections.append(事件)
}
}
}
}
}.gridStyle(self.style2)
}
}
}
}
结构多重选择事件:视图{
变量标题:字符串
被选为:布尔
var操作:()->Void
var body:一些观点{
按钮(操作:self.action){
HStack{
如果自选的话{
文本(self.title)
.font(UIManager.einaBodySemibold)
.foregroundColor(UIManager.hBlue)
.padding(.vertical,7)
.padding(.卧式,10)
.background(UIManager.hBlueLight)
.转弯半径(6)
}否则{
文本(self.title)
.font(UIManager.einaBody)
.foregroundColor(UIManager.hDarkBlue)
.padding(.vertical,7)
.padding(.卧式,10)
.background(UIManager.hLightGrey)
.转弯半径(6)
}
}
}
}
}
类getEventItems:ObservableObject{
让didChange=PassthroughSubject()
@已发布的var事件=[EventItem](){
迪塞特{
发送(自我)
}
}
func getEventItems(){
EventItemViewModel()
self.events=eventItems
})
}
init(){
getEventItems()
}
}