我如何使用Combine来跟踪UIViewRepresentable类中的UITextField更改?

问题描述 投票:0回答:1

我已经创建了一个自定义文本字段,我想利用Combine。为了在文本字段中的文本更改时得到通知,我目前使用自定义修饰符。它工作正常,但我希望此代码可以在CustomTextField结构中使用。

我的CustomTextField结构符合UIViewRepresentable。在此结构中,有一个名为Coordinator的NSObject类,它符合UITextFieldDelegate。

我已经在使用其他UITextField委托方法,但是找不到与我的自定义修饰符完全一样的方法。一些方法很接近,但是并没有完全按照我希望的方式表现。无论如何,我觉得最好将此新的自定义textFieldDidChange方法放在Coordinator类中。

这是我的自定义修饰符

private let textFieldDidChange = NotificationCenter.default
    .publisher(for: UITextField.textDidChangeNotification)
    .map { $0.object as! UITextField}


struct CustomModifer: ViewModifier {

     func body(content: Content) -> some View {
         content
             .tag(1)
             .onReceive(textFieldDidChange) { data in

                //do something

             }
    }
}

我一直在观看有关Combine的视频,我想在我正在开发的新应用中开始使用它。我真的认为在这种情况下使用是正确的事情。

最近几天我一直在阅读有关Combine的内容,但仍然不确定如何实现此目的。我真的很喜欢一个例子。

提前感谢

swift uitextfield swiftui uitextfielddelegate combine
1个回答
0
投票

类似的东西呢?

TextField中的ContentView发生更改时,此类会通知您。

class CustomModifier: ObservableObject {
    var observedValue: String = "" {
        willSet(observedValue) {
            print(observedValue)
        }
    }
}

确保您在修饰符类上使用@ObservedObject,并且可以看到更改。

struct ContentView: View {
    @ObservedObject var modifier = CustomModifier()

    var body: some View {
        TextField("Input:", text: $modifier.value)
    }
}
© www.soinside.com 2019 - 2024. All rights reserved.