Kev*_*OUX 8 mvvm viewmodel swiftui
我想将我的 @FocusState 驱逐到我的 viewModel 中:
struct ContentView: View {
@ObservedObject private var viewModel = ViewModel()
var body: some View {
Form {
TextField("Text", text: $viewModel.textField)
.focused(viewModel.$hasFocus)
Button("Set Focus") {
viewModel.hasFocus = true
}
}
}
}
class ViewModel: ObservableObject {
@Published var textField: String = ""
@FocusState var hasFocus: Bool
}
Run Code Online (Sandbox Code Playgroud)
但是当我启动我的应用程序时,我收到以下 SwiftUI 警告:
运行时:SwiftUI:在视图主体之外访问 FocusState 的值。这将导致 Binding 的初始值恒定并且不会更新。
在这种情况下,我的绑定永远不会改变。
我的问题是:可以在 viewModel 中使用 FocusState 吗?
Asp*_*eri 12
它是视图中的包装器(与 相同State)。但可以将其映射到已发布的属性,如下面的方法所示。
使用 Xcode 13.2 / iOS 15.2 进行测试
struct ContentView: View {
@ObservedObject private var viewModel = ViewModel()
@FocusState var hasFocus: Bool
var body: some View {
Form {
TextField("Text", text: $viewModel.textField)
.focused($hasFocus)
.onChange(of: viewModel.hasFocus) {
hasFocus = $0
}
.onChange(of: hasFocus) {
viewModel.hasFocus = $0
}
Button("Set Focus") {
viewModel.hasFocus = true
}
}
}
}
class ViewModel: ObservableObject {
@Published var textField: String = ""
@Published var hasFocus: Bool = false
}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
2603 次 |
| 最近记录: |