簡體   English   中英

如何重新排序 SwiftUI 列表?

[英]How do you reorder a SwiftUI list?

我在 SwiftUI 列表中有一個對象列表,我希望能夠根據用戶輸入過濾該列表。 我有列表求助,但我不知道如何在列表視圖上調用“刷新”

struct VitalsDetailView: View {
    var body: some View {
        var filteredVitals = VitalsManager.sharedInstance.vitals?.vitals?.filter({ $0.name == self.vitalName})
            
        VStack(alignment: .leading, spacing: 5) {
            VStack(alignment: .leading) {
                HStack {
                    Text(NSLocalizedString("VitalsDetails.sortedBy", tableName: nil, bundle: Bundle.main, value: "Sorted By.", comment: ""))
                        .font(.system(size: 13))
                        .fontWeight(.medium)
                    Text(NSLocalizedString("VitalsDetails.dateReported", tableName: nil, bundle: Bundle.main, value: "Date Reported.", comment: ""))
                        .font(.system(size: 13))
                        .fontWeight(.light)
                    Text(displayText)
                        .font(.system(size: 13))
                        .fontWeight(.light)
                    Image(systemName: "arrow.up.arrow.down")
                        .renderingMode(.template)
                        .foregroundColor(.blue)
                }
                .onTapGesture(count: /*@START_MENU_TOKEN@*/1/*@END_MENU_TOKEN@*/, perform: {
                    //reorder list
                    if(newToOld) {
                        filteredVitals = filteredVitals!.sorted(by: {$0.dateOfIssue!.compare($1.dateOfIssue!) == .orderedAscending })
                    } else {
                        filteredVitals = filteredVitals!.sorted(by: {$0.dateOfIssue!.compare($1.dateOfIssue!) == .orderedDescending })
                    }
                })
                Text("Last Updated Date")
                    .font(.system(size: 15))
            }
            .padding()
            
            List(filteredVitals!) { vital in
                vitalsCell(vital: vital)
            }
            
        }
        .frame(minWidth: 0,
               maxWidth: .infinity,
               minHeight: 0,
               maxHeight: .infinity,
               alignment: .topLeading)
        .background(Color((#colorLiteral(red: 0.8039215803, green: 0.8039215803, blue: 0.8039215803, alpha: 1))))
        .navigationBarTitle(vitalName)
    }
}

您可以將您的filteredVitals設置為 state(或進入視圖 model 並發布),即

struct VitalsDetailView: View {
    @State private var filteredVitals = VitalsManager.sharedInstance.vitals?.vitals?.filter({ $0.name == self.vitalName})

var body: some View {
   // ... other code

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM