ios - 将状态/绑定(bind)传递给 UIViewRepresentable

标签 ios swift swift5

将状态变量传递给我的自定义文本字段的正确方法是什么?我希望避免其他方法/可观察的。这不应该工作吗?

我在示例项目中重新创建了以下问题。

import SwiftUI

struct ParentView: View {
    @State var text: String = "initial"
    var body: some View {
        VStack {
            ChildView(text: $text)
            Text(self.text)
        }
    }
}
struct ChildView: View {
    @Binding var text: String
    var body: some View {
        MyTextField(text: $text).frame(width: 300, height: 40, alignment: .center)
    }
}

struct MyTextField: UIViewRepresentable {
    @Binding var text: String
    func makeUIView(context: Context) -> UITextField {
        let view = UITextField()
        view.borderStyle = UITextField.BorderStyle.roundedRect
        return view
    }
    func updateUIView(_ uiView: UITextField, context: Context) {
        uiView.text = text
    }
}

最佳答案

创建 @Binding您的 CustomTextField 中的属性(property)像:

struct CustomTextField: UIViewRepresentable {
    @Binding var text: String 
}

初始化您的 @Binding位于 init() 的属性(property)像:
init(text: Binding<String>) {
    self._text = text
}

通过text属性(property)给 UITextField像:
func makeUIView(context: Context) -> UITextField {
    // Customise the TextField as you wish
    textField.text = text        
    return textField
}

更新 textUITextField像:
func updateUIView(_ uiView: UITextField, context: Context) {
    uiView.text = self.text
}

更新 @Binding带有用户输入文本的属性,例如:
func textField(_ textField: UITextField, shouldChangeCharactersIn range: NSRange, replacementString string: String) -> Bool {

    if let value = textField.text as NSString? {
    let proposedValue = value.replacingCharacters(in: range, with: string)
        parent.text = proposedValue as String // Here is updating
    }
    return true
}

您的 ContentView应该看起来像:
struct ContentView: View {
    @State var text: String = ""
    var body: some View {
        CustomTextField(text: $text)
    }
}

现在好了,如果你想要 CustomTextField 的完整代码然后看this answer .

关于ios - 将状态/绑定(bind)传递给 UIViewRepresentable,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/61446026/

相关文章:

swift - 具有 1 个项目的 FunctionBuilder

ios - UIWebView shouldStartLoadWithRequest 不调用某些链接

ios - 页面 View 导航栏标题

ios - swift 5.1 : How can I pass NULL as an argument?

swift - 如何自定义多个注解?解析-Swift

ios - 处理 uitableview 中的 uibutton 单击导致错误

swift - swift 中类型约束泛型函数的调用优先级?

ios - TabController 上的 ContainerView 创建 Phantom Tab

ios - 将 UIButton 传递给函数

iphone - iOS 子类 UICollectionViewCell 自定义初始化方法