我使用初始化器传入一个绑定,如下所示:
let placeholderString: String
let imageName: String
let keyboardType: UIKeyboardType
let fieldType: DataFieldType
@Binding var fieldName: String // This var here.
private var isFocused: FocusState<Bool>.Binding
@State private var frame = CGRect.zero
init(placeholderString: String, imageName: String, keyboardType: UIKeyboardType, fieldType: DataFieldType, fieldName: Binding<String>, focusState: FocusState<Bool>.Binding) {
self.placeholderString = placeholderString
self.imageName = imageName
self.keyboardType = keyboardType
self.fieldType = fieldType
self._fieldName = fieldName // This var here.
self.isFocused = focusState
}
我在文本字段上使用String绑定,它工作正常。
我创建了一个自定义绑定,它会生成一个Binding Double,如下所示:
private var doubleBinding: Binding<Double?> {
get {
guard let binding = Double(fieldName) else { return .constant(nil) }
return .constant(binding)
}
set {
guard let double = newValue.wrappedValue else { return }
fieldName = String(double)
}
}
我将此文本字段与UIKit中内置的自定义文本字段一起使用,UIKit在其初始化程序中接受Binding Double。
我的问题是,每当我关闭键盘时,我输入的值就会消失,而我只剩下视图第一次出现时文本字段中最初加载的内容。
我试过从@State Double传递绑定,它似乎工作正常,所以我想这一定是我设置自定义绑定的方式有问题。任何帮助都将不胜感激。谢谢!
1条答案
按热度按时间3bygqnnd1#
不得不使用此语法。
不知道为什么其他语法不工作。如果有人有一些信息,为什么这工程和其他没有请发表评论。