Swiftui viewModel和TextField存在问题
我不确定这是SwiftUI错误还是我的错: 当我在Swiftui viewModel和TextField存在问题,swiftui,Swiftui,我不确定这是SwiftUI错误还是我的错: 当我在TextField中键入一些文本并按下键盘上的返回按钮(以隐藏键盘)时,键入的文本将被删除,TextField再次为空。我已经在不同的模拟器和真实设备上尝试过这个解决方案。这个问题每次都会出现。我使用的是iOS 14.3,Xcode 12.4 TextField查看: struct CreateNewCard: View { @ObservedObject var viewModel: CreateNewCardViewModel
TextField
中键入一些文本并按下键盘上的返回按钮(以隐藏键盘)时,键入的文本将被删除,TextField
再次为空。我已经在不同的模拟器和真实设备上尝试过这个解决方案。这个问题每次都会出现。我使用的是iOS 14.3,Xcode 12.4
TextField
查看:
struct CreateNewCard: View {
@ObservedObject var viewModel: CreateNewCardViewModel
var body: some View {
TextField("placeholder...", text: $viewModel.definition)
.foregroundColor(.black)
}
}
视图模型:
class CreateNewCardViewModel: ObservableObject {
@Published var definition: String = ""
}
主要观点:
struct MainView: View {
@State var showNew = false
var body: some View {
Button(action: { showNew = true }, label: { Text("Create") })
.sheet(isPresented: $showNew, content: {
CreateNewCard(viewModel: CreateNewCardViewModel())
})
}
}
@迅捷朋克:这是我的第二个问题:
假设我的视图模型有一个附加参数(id
):
在我创建视图到viewModel时,需要传递此参数。对于本例,假设我们迭代了一些id为的元素:
struct MainView: View {
@State var showNew = false
var body: some View {
ForEach(0...10, id: \.self) { index in // <<<---- this represents the id
Button(action: { showNew = true }, label: { Text("Create") })
.sheet(isPresented: $showNew, content: {
// now I have to pass the id, but this
// is the same problem as before
// because now I create every time a new viewModel, right?
CreateNewCard(viewModel: CreateNewCardViewModel(id: index))
})
}
}
struct MainView:View{
@状态变量showNew=false
var body:一些观点{
ForEach(0…10,id:\.self){index in/您的问题就在这里,您没有在主视图中创建StateObject,并且每次按下键盘上的键时,您都创建了一个新模型,默认为空
import SwiftUI
struct ContentView: View {
@State var showNew = false
@StateObject var viewModel: CreateNewCardViewModel = CreateNewCardViewModel() // <<: Here
var body: some View {
Button(action: { showNew = true }, label: { Text("Create") })
.sheet(isPresented: $showNew, content: {
CreateNewCard(viewModel: viewModel)
})
}
}
嘿,谢谢。这很有道理……但我想知道如果我需要为单个元素创建一个viewModel,我该如何解决我的问题?假设我有一个带有一些元素的列表
,对于每个元素,我需要一个特定的viewModel,我必须将其作为参数传递(例如viewModel(elem:element1)
)?一个“固定的”StateObject已经不可能了,对吗?不客气,我在理解和阅读你的代码方面有问题,你能提出一个问题并在那里显示代码,然后我们一起在那里工作吗?我已经添加了第二个问题。谢谢!:)@Erik:谢谢添加你的问题,但我想告诉你,提出一个新问题,我们不能在一个问题中有两个问题发帖,你的问题可能因此被删除或关闭,所以请将此问题编辑到第一个问题,并为第二个问题生成新问题,我来回答新问题。哦,好了,完成了:)
import SwiftUI
struct ContentView: View {
@State var showNew = false
@StateObject var viewModel: CreateNewCardViewModel = CreateNewCardViewModel() // <<: Here
var body: some View {
Button(action: { showNew = true }, label: { Text("Create") })
.sheet(isPresented: $showNew, content: {
CreateNewCard(viewModel: viewModel)
})
}
}
struct CreateNewCard: View {
@ObservedObject var viewModel: CreateNewCardViewModel
var body: some View {
TextField("placeholder...", text: $viewModel.definition)
.foregroundColor(.black)
}
}
class CreateNewCardViewModel: ObservableObject {
@Published var definition: String = ""
}