swiftui - 网格内的多选 - 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, 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()
}
}
解决方案
推荐阅读
- kerberos - 使用 Kerberos 进行 RDP
- java - Junit 平台 v.5.8.1 java.lang.NoSuchMethodError: org.junit.platform.commons.util.AnnotationUtils.findAnnotation 出现错误
- regex - 如何使用 LEX 仅打印从字符串中识别的特定字符
- php - 我无法使用 Imagick 加载完整的 url 图像(错误 ssl)
- javascript - 不同的计算结果
- javascript - 如何使用 Puppeteer 访问模态元素?
- java - FunctionalInterface 中“abstract”关键字的目的是为了将“lambda”方法与其他抽象方法区分开来吗?
- if-statement - 多个变量R之间的if else语句
- c# - 使用反射从编译的类中获取 ToString 表达式?
- variables - 在 Yoast wordpress 插件中更改 404 页面的默认变量