如何解决网格内的多重选择-SwiftUI
我正在尝试在动态网格内实现多重选择。
使用此代码,它可以图形化地选择所有元素,基本上它们都会改变颜色。它保存了所选数据中的数据,但是以图形方式将它们全部选中,因此我一次不能选择并保存多个数据。
我认为问题可能出在网格上,但我也尝试与其他库一起更改网格,但没有做任何更改。
在我只拥有一个数组并可以正常工作之前,现在却无法从数据库中获取数据。
我仍在使用,必须使用swiftui 1,因此新的swiftui中没有提供网格。
我将这个库用于网格https://github.com/spacenation/swiftui-grid(模块化网格之一),因为我有来自数据库的事件。
谢谢。
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,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()
}
}
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。