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

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了我如何使用Combine来跟踪UIViewRepresentable类中的UITextField更改?相关的知识,希望对你有一定的参考价值。

我已经创建了一个自定义文本字段,我想利用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的内容,但仍然不确定如何实现此目的。我真的很喜欢一个例子。

提前感谢

答案

类似的东西呢?

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)
    }
}

以上是关于我如何使用Combine来跟踪UIViewRepresentable类中的UITextField更改?的主要内容,如果未能解决你的问题,请参考以下文章

Combine + SwiftUI Form + RunLoop 导致表格视图呈现不可预测

异步下载图像时SwiftUI和Combine工作不顺畅

SwiftUI + Combine:如何将数据分配给带有动画的模型

如何使用 Combine 的 CurrentValueSubject 并在 SwiftUI 视图中访问它?

使用 Combine 发布 API 请求时遇到问题

Alamofire+Combine:如何从 AFError 中获取自定义错误类型