SwiftUI中由@Binding String创建的Binding<Double>无法更新UI问题求助
问题:自定义Binding<Double?>绑定UIKit TextField后收起键盘值消失
现有代码
视图初始化器与属性
我通过以下初始化器传入Binding<String>:
let placeholderString: String let imageName: String let keyboardType: UIKeyboardType let fieldType: DataFieldType @Binding var fieldName: String // 此处的变量 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 // 此处的变量 self.isFocused = focusState }
将这个String类型的Binding用于SwiftUI原生TextField时功能正常。
自定义Double?绑定
我创建了一个生成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构建的、初始化器接收Binding<Double>的自定义TextField。
问题现象
每当收起键盘时,输入的值就会消失,文本框中保留的是视图首次出现时加载的初始值:
排查情况
我尝试传入基于@State Double的绑定,功能完全正常,因此可以确定问题出在上述自定义绑定的实现上,希望能得到解决思路。
内容的提问来源于stack exchange,提问作者Francojamesfan
相关产品推荐
相关产品推荐

