我有一个结构,它从 CoreData 中洗牌和列出记录。我想用按钮重新加载/刷新列表视图。我尝试使用 Button 中的函数。有没有办法做到这一点?
var body: some View {
VStack {
List {
ForEach(dictionary.shuffled().prefix(upTo: 10),id: \.self) { word in
HStack {
Text("\(word.englishWord)")
.foregroundColor(Color.blue)
Text("| \(word.urhoboWord) |")
.foregroundColor(Color.green)
Image(word.imageName)
.resizable()
.frame(width:40, height: 40)
}//HStack
}//End of ForEach
}//End of List
//Button to reload and shuffle list
Button(action: {}) {
Text("Shuffle")
.padding()
.background(Color.black)
.foregroundColor(Color.white)
.cornerRadius(6)
}
.navigationBarTitle(Text("Begin Learning"),displayMode: .inline)
Run Code Online (Sandbox Code Playgroud)
Nep*_*Muw 13
@State只需触发或@Published的任何值@ObservableObject。如果没有,只需创建一个:
@State var refresh: Bool = false
func update() {
refresh.toggle()
}
Run Code Online (Sandbox Code Playgroud)
您应该将其移动dictionary.shuffled().prefix(upTo: 10)到您ViewModel的视图中,并根据数据重新加载。看看这个代码以供参考:
struct SampleShuffleView : View {
@ObservedObject var viewModel : ShuffleViewModel = ShuffleViewModel()
var body : some View {
VStack {
List(self.viewModel.listData, id: \.self) { str in
Text(str)
}
Button(action: self.shuffle) {
Text("Shuffle me").padding()
}.background(Color.white).padding()
}
}
func shuffle() {
self.viewModel.shuffle()
}
}
class ShuffleViewModel : ObservableObject {
@Published var listData = ["one", "two", "three", "four"]
func shuffle() {
listData.shuffle()
//or listData = dictionary.shuffled().prefix(upTo: 10)
}
}
Run Code Online (Sandbox Code Playgroud)
注意:所有视图的组件将在@ObservedObject更改时重新加载,因此请考虑将较小的视图-视图模型分开,或使用@State变量。
希望这可以帮助。
想一想。要在点击时显示数组和随机播放,请完全按照您希望看到的方式进行操作。首先以类似“列表”的方式向我们展示数组,然后根据用户操作对其进行洗牌。
struct ContentView: View {
@State var arr = ["ALFA", "BETA", "GAMA", "DELTA"]
var body: some View {
VStack {
VStack {
Divider()
ForEach(arr, id: \.self) { element in
VStack {
Text(element)
Divider()
}
}
}
Spacer()
Button(action: {
self.arr.shuffle()
}) {
Text("Shuffle")
}
Spacer()
}
}
}
Run Code Online (Sandbox Code Playgroud)
arr.shuffle()更改了@StateView 并强制 SwiftUI 自动“重新加载它”。
| 归档时间: |
|
| 查看次数: |
24073 次 |
| 最近记录: |