SwiftUI-列表不';当我将数据从视图传输到另一视图时,不会更新
我正在尝试将数据从FirstView发送到名为myMoodList的结构中的列表。 我的问题是,一旦数据发送到myMoodList,它就不会添加到列表中。 所以我在navigationBar中添加了虚拟按钮,以便添加包含数据的行 这是我的密码SwiftUI-列表不';当我将数据从视图传输到另一视图时,不会更新,swift,xcode,swiftui,swiftui-navigationlink,Swift,Xcode,Swiftui,Swiftui Navigationlink,我正在尝试将数据从FirstView发送到名为myMoodList的结构中的列表。 我的问题是,一旦数据发送到myMoodList,它就不会添加到列表中。 所以我在navigationBar中添加了虚拟按钮,以便添加包含数据的行 这是我的密码 var body: some View { NavigationView{ VStack{ Text(currentMood) } }.navigationBarItems(trailing: Na
var body: some View {
NavigationView{
VStack{
Text(currentMood)
}
}.navigationBarItems(trailing: NavigationLink(destination:MyMoodList(currentMood: currentMood)) {
Text("Next")
}
).navigationBarTitle("Mood People", displayMode: .inline)
}
所以当前情绪是字符串,它的值是“快乐”
这是我的主要观点
struct moodStructure: Identifiable,Decodable {
let id = UUID()
let myMood: String
}
class MoodViewModel: ObservableObject {
@Published var moodStatus = "Test on MoodObjectModel"
@Published var moodArray: [moodStructure] = [
.init(myMood: "Happy"),
.init(myMood: "Sad")
]
func addItem(moodStatus: String) {
moodArray.append(moodStructure(myMood: moodStatus))
print(moodArray.capacity)
}
func didChange() {
self.moodStatus = "Test inside did change"
}
}
struct MyMoodList: View {
@ObservedObject var moodVM = MoodViewModel()
@State var currentMood: String
var body: some View {
NavigationView {
List() {
ForEach(moodVM.moodArray,id: \.myMood) { item in
HStack {
VStack {
Text(item.myMood)
Text("Feb/3/2020")
.font(.callout)
}
Spacer()
Text(">")
.fontWeight(.semibold)
}
}
}.navigationBarTitle("Tracker")
.listStyle(GroupedListStyle())
.navigationBarItems(trailing: Button(action: {
self.moodVM.addItem(moodStatus: self.currentMood)
}) {
Image(systemName: "plus")
})
}
}}
所以MyMoodList结构有navigationBarButton,我设置它只是为了确保数据已经成功地从第一个视图发送到MyMoodList。
但我想要的是,一旦用户从firstView移动到MyMoodList,它就会自动添加到列表中。我不想使用该按钮,以便将其添加到列表中
我不知道列表是否不会自动更新,或者在项目添加到moodArray类MoodViewModel中之前先加载列表
多谢各位
更新:
依我看,我有
.navigationBarItems(trailing: NavigationLink(destination:MyMoodList(currentMood: currentMood, addNewPost: true))
关于MyMoodList类
我添加了@State var addNewPost:Bool
.onAppear() {
if self.addNewPost == true {
self.moodVM.addItem(moodStatus: self.currentMood)
self.addNewPost = false
} else {
print("Nothing !!")
}
}
在
MyMoodList
结构的NavigationView
上使用.code>onAppear修饰符将字符串添加到数组中
struct ContentView: View {
var currentMood = "Happy1"
var body: some View {
NavigationView {
VStack{
Text(currentMood)
NavigationLink(destination:MyMoodList(currentMood: currentMood)) {
Text("Next")
}
}
.navigationBarTitle("Mood People", displayMode: .inline)
}
}}
struct moodStructure: Identifiable,Decodable {
let id = UUID()
let myMood: String
}
class MoodViewModel: ObservableObject {
@Published var moodStatus = "Test on MoodObjectModel"
@Published var moodArray: [moodStructure] = [
.init(myMood: "Happy"),
.init(myMood: "Sad")
]
func addItem(moodStatus: String) {
moodArray.append(moodStructure(myMood: moodStatus))
print(moodArray.capacity)
}
func didChange() {
self.moodStatus = "Test inside did change"
}
}
struct MyMoodList: View {
@ObservedObject var moodVM = MoodViewModel()
var currentMood: String
var body: some View {
NavigationView {
List() {
ForEach(moodVM.moodArray,id: \.myMood) { item in
HStack {
VStack {
Text(item.myMood)
Text("Feb/3/2020")
.font(.callout)
}
Spacer()
Text(">")
.fontWeight(.semibold)
}
}
}.navigationBarTitle("Tracker")
.listStyle(GroupedListStyle())
.navigationBarItems(trailing: Button(action: {
self.moodVM.addItem(moodStatus: self.currentMood)
}) {
Image(systemName: "plus")
})
}
.onAppear {
if !self.moodVM.contains(self.currentMood) {
self.moodVM.addItem(moodStatus: self.currentMood)
}
}
}}
在
MyMoodList
结构的NavigationView
上使用.code>onAppear修饰符将字符串添加到数组中
struct ContentView: View {
var currentMood = "Happy1"
var body: some View {
NavigationView {
VStack{
Text(currentMood)
NavigationLink(destination:MyMoodList(currentMood: currentMood)) {
Text("Next")
}
}
.navigationBarTitle("Mood People", displayMode: .inline)
}
}}
struct moodStructure: Identifiable,Decodable {
let id = UUID()
let myMood: String
}
class MoodViewModel: ObservableObject {
@Published var moodStatus = "Test on MoodObjectModel"
@Published var moodArray: [moodStructure] = [
.init(myMood: "Happy"),
.init(myMood: "Sad")
]
func addItem(moodStatus: String) {
moodArray.append(moodStructure(myMood: moodStatus))
print(moodArray.capacity)
}
func didChange() {
self.moodStatus = "Test inside did change"
}
}
struct MyMoodList: View {
@ObservedObject var moodVM = MoodViewModel()
var currentMood: String
var body: some View {
NavigationView {
List() {
ForEach(moodVM.moodArray,id: \.myMood) { item in
HStack {
VStack {
Text(item.myMood)
Text("Feb/3/2020")
.font(.callout)
}
Spacer()
Text(">")
.fontWeight(.semibold)
}
}
}.navigationBarTitle("Tracker")
.listStyle(GroupedListStyle())
.navigationBarItems(trailing: Button(action: {
self.moodVM.addItem(moodStatus: self.currentMood)
}) {
Image(systemName: "plus")
})
}
.onAppear {
if !self.moodVM.contains(self.currentMood) {
self.moodVM.addItem(moodStatus: self.currentMood)
}
}
}}
我要修改整个答案。检查新答案。非常感谢,我会检查并让你知道。每次我打开我的情绪列表,它都会添加新的一行。所以我更新了我的问题。你认为它现在有效吗?在这种情况下,你可以检查数组是否有元素。检查我对数组使用的更新答案
包含的。不需要新的状态变量进行检查。我将修改整个答案。检查新答案非常感谢,我会检查并让您知道。每次打开我的MoodList,它都会添加新行。所以我更新了我的问题。你认为它现在有效吗?在这种情况下,你可以检查数组是否有元素。检查我对数组使用的更新答案包含的。无需新的状态变量进行检查。