我借助UiRepresentable在SwiftUi中创建了一个UiTextView。我想在调用textViewDidEndEditing时将通知发送回我的SwiftUi,因此我可以在SwiftUi代码中使用它
SampleView
{
}
.onRecieve(Customview.isTextViewDidEndEditing)
{
// Update Code
}
是否可以使我的customView类符合ObservableObject的要求?
这是我的CustomTextView示例代码
struct CustomView : UIViewRepresentable
{
@Binding var text : String
let willChange = PassthroughSubject<Void, Never>()
var textViewDoneEditing : Bool? {didSet {willChange.send()}}
func makeCoordinator() -> Coordinator {
return Coordinator(self)
}
class Coordinator : NSObject, UITextViewDelegate, ObservableObject
{
var parent: CustomView
init(_ uiTextView: CustomView) {
self.parent = uiTextView
}
func textViewDidChange(_ textView: UITextView) {
parent.text = textView.text
}
func textViewDidEndEditing(_ textView: UITextView) {
print("Ediiting is Done")
}
}
func makeUIView(context: UIViewRepresentableContext<CustomView>) -> UITextView {
let textView = UITextView()
textView.delegate = context.coordinator
return textView
}
func updateUIView(_ uiView: UITextView, context: UIViewRepresentableContext<CustomView>) {
uiView.text = self.text
}
}
答案 0 :(得分:0)
您不需要使任何SwiftUI视图都符合ObservableObject
。一个简单的绑定属性就可以了,因为它将所有相关数据传递回链中。
根据协议的声明,进一步的Swift struct
类型不能符合ObservableObject
:
protocol ObservableObject : AnyObject
AnyObject
是class
或引用类型。人们可能会使用ObservableObject
之类的东西来监听视图模型或数据存储等。要从SwiftUI视图在视图链上传递数据,请改用@Binding
。
输入新值时,您只需分配给text
绑定。
然后,您可以从调用视图的body
实例化视图,传入可绑定的属性(例如,使用@State
前缀的$
或自定义{{1} }属性。
Binding
SwiftUI会为您处理其余的事情!