binding - SwiftUI & UITextField ViewModel 绑定问题
问题描述
我正在尝试在 SwiftUI 中使用 UITextField 。我为 UITextField 创建了一个自定义结构,并创建了一个可绑定字符串,它包含输入文本。当我尝试将输入文本传递回 viewModel 时,它不起作用。为了比较,我将 SwiftUI Textfield 放在代码中并且它可以工作有人可以帮忙吗?
import SwiftUI
final class RegistrationViewViewModel: ObservableObject {
@Published var firstName: String = "" {
didSet {
print(oldValue)
}
willSet {
print(newValue)
}
}
@Published var lastName: String = "" {
didSet {
print(oldValue)
}
willSet {
print(newValue)
}
}
func saveData() {
print("Saving...", firstName, lastName)
}
}
struct RegistrationView: View {
@ObservedObject var viewModel = RegistrationViewViewModel()
var body: some View {
VStack(spacing: 50) {
TextField("Last name", text: $viewModel.lastName)
.frame(width: 300, height: 35, alignment: .center)
.border(Color(.systemGray))
CustomTextField(inputText: $viewModel.firstName, placeholder: "First name")
.frame(width: 300, height: 35, alignment: .center)
.border(Color(.systemGray))
Button(action: {
self.viewModel.saveData()
}) {
Text("Submit")
}
}
}
}
struct CustomTextField: UIViewRepresentable {
var inputText: Binding<String>
var placeholder: String
func makeUIView(context: Context) -> UITextField {
let textfield = UITextField(frame: .zero)
textfield.delegate = context.coordinator
textfield.placeholder = placeholder
return textfield
}
func updateUIView(_ uiView: UITextField, context: Context) {}
func makeCoordinator() -> Coordinator {
Coordinator(self)
}
class Coordinator: NSObject, UITextFieldDelegate {
var parent: CustomTextField
init(_ parent: CustomTextField) {
self.parent = parent
}
func textFieldShouldReturn(_ textField: UITextField) -> Bool {
textField.resignFirstResponder()
return true
}
}
}
解决方案
尝试如下设置你的 updateUIView 函数:
func updateUIView(_ uiView: UITextField, context: Context) {
uiView.text = inputText
}
推荐阅读
- c# - 如何在不指定泛型参数的情况下将实现实例转换为接口(实现知道它)?
- python - selenium.common.exceptions.WebDriverException:消息:无效参数:无法识别的功能:带有 Selenium 和 ChromeDriver 77.0 的 chromeOptions
- angular - Angular 6 - 声明两个具有多个模块的组件
- java - Spark/scala 中的 SQL 查询
- javascript - 添加链接到html表格列中的所有单元格
- javascript - 生成具有动态内容的字符串
- python - 为什么我会收到此类的“缺少 1 个位置参数”错误?
- c++ - 从 qmake 运行脚本以获取内部版本号
- java - 广播接收器不能静态工作
- algorithm - 给定一组格点,有多少组点?