[英]Customise Section Headers ONLY when Headers are pinned, otherwise not (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.