[英]selecting multiple items from the list and changing their color in SwiftUI
我正在尋找一種與此類似的方法來解決此問題。 有可能嗎?
單品沒問題。 所選項目將為我自己的顏色“listTextColor”的 rest 白色。 但是,是否有可能以類似的方式將“selectedItems”數組中選擇和保存的元素顯示為白色而 rest 顯示為不同的顏色?
示例代碼:
@State var recordArray: Array = arrayRecords
@State var selectedItems: Array = []
@State var selections: String?
List() {
ForEach(self.recordArray, id: \.self) { record in
Text(record)
.onTapGesture {
self.selections = record
self.selectedItems.append(record)
}
.foregroundColor(self.selections == record ? Color(.white) : Color(self.listTextColor2))
}
}
您最好的選擇是使用 View Model 而不是純字符串,並在其中使用標志為行着色。
struct ContentView: View {
@State var recordArray: [RecordItem]
var body: some View {
List() {
ForEach(0..<self.recordArray.count, id: \.self) { i in
VStack {
Text(self.recordArray[i].title)
}
.border(Color.black)
.onTapGesture {
self.recordArray[i].isSelected.toggle()
self.recordArray[i] = self.recordArray[i]
}
.foregroundColor(self.recordArray[i].isSelected ? Color(.red) : Color(.green))
}
}
}
}
class RecordItem {
var title = ""
var isSelected = false
}
我找到了這個問題的答案。
@State var recordArray: Array = arrayRecords
@State var selectedItems: Array = []
@State var selections: String?
var body: some View {
List() {
ForEach(self.recordArray, id: \.self) { record in
Text(record)
.onTapGesture {
if self.selectedItems.first(where: { $0 as! String == record } ) != nil {
self.selectedItems.removeAll(where: { $0 as! String == record } )
} else {
self.selectedItems.append(record)
}
}
.foregroundColor((self.selectedItems.first(where: { $0 as! String == record } ) != nil) ? Color(.white) : Color(self.listTextColor2))
}
}
}
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.