簡體   English   中英

在 SwiftUI 中創建帶有節標題的動態列表?

[英]Creating a dynamic List with section headers in SwiftUI?

我正在試驗 SwiftUI,我正在嘗試構建一個我已經在 UIKit 中繪制的鍛煉跟蹤器應用程序。 我正在嘗試構建一個練習列表供用戶參考,因此當應用程序啟動時,我會在 CoreData 中加載一些練習,並且該練習具有以下屬性。

@NSManaged public var name: String
@NSManaged public var muscleGroup: String
@NSManaged public var exerciseDescription: String
@NSManaged public var type: String
@NSManaged public var id: UUID

當我構建列表視圖時,我從 CoreData 中檢索了一個練習數組並將它們加載到一個列表中。 這適用於基本列表,問題是我想按字母順序創建一個帶有部分標題的列表。 在 UIKit 中,我通過構建 [ "Prefix" : [Exercise]] 形式的字典並使用鍵作為節標題來做到這一點。 這很實用,因為我可以通過更改字典和重新加載數據為用戶提供排序選項。 在 SwiftUI 中,我似乎無法使其工作,因為我無法在創建視圖之前處理 fetch 請求對象,並且無法迭代字典。 這是我的代碼:

import SwiftUI
import CoreData

struct ExerciseListUIView: View {

@Environment(\.managedObjectContext) var managedObjectContext
@FetchRequest(
    entity: Exercise.entity(),
    sortDescriptors: [
        NSSortDescriptor(keyPath: \Exercise.name, ascending: true)
    ]
) var exerciseList: FetchedResults<Exercise>

@State private var prefixList = [String]()

var body: some View {

    return NavigationView {

        VStack{
            List(exerciseList, id: \.self) { exercise in
                Text(exercise.name)
            }
        }
        .navigationBarTitle("Exercises")
    }
}
}

我嘗試了很多東西,但似乎沒有任何效果。 最有前途的解決方案似乎是將練習直接存儲在不同的數據結構中,ExtractionsByLetter(prefix: "String", Exercise: [Exercise]),檢索 [ExercisesByLetter] 的數組並對其進行迭代以構建列表,但這意味着改變我存儲數據的方式,在數據存儲功能中添加更多的工作,並被迫為每個排序選項添加不同的存儲,例如 ExercisesByMuscleGroup、ExtractionsByEquipment 等。

讓我知道你的想法,謝謝。

對於任何對解決方案感興趣的人,我想出了以下內容。 我為我的主視圖創建了一個 ViewModel 來操作數據。 在那個視圖模型中,我從 CoreData 中以 [Exercise] 數組的形式檢索所有練習,並將它們存儲在 ViewModel 的一個屬性中。 然后我創建了一個輔助函數來遍歷 [Exercise] 列表並創建一個 [ExercisesBy] 數組。 此類型包含一個存儲排序標准(第一個字母、肌肉群、設備等)的屬性和另一個存儲符合該標准的運動數組的屬性。

然后從我的視圖中迭代這個 ExamsBy 數組以構建分段列表。

暫無
暫無

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

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