我已将 a 包裹UITextView
在 a 中UIViewRepresentable
并包含 a Coordinator
as UITextViewDelegate
,但未调用事件。我究竟做错了什么?
struct TextView : UIViewRepresentable {
typealias UIViewType = UITextView
var placeholder : String
@Binding var text: String
func makeCoordinator() -> Coordinator {
Coordinator(self)
}
func makeUIView(context: UIViewRepresentableContext<TextView>) -> UITextView {
let textView = UITextView()
let placeholderLabel = UILabel()
textView.font = UIFont(name: "Helvetica", size: 16)
placeholderLabel.restorationIdentifier = "Placeholder"
placeholderLabel.text = self.placeholder
placeholderLabel.font = UIFont.italicSystemFont(ofSize: (textView.font?.pointSize)!)
placeholderLabel.sizeToFit()
textView.addSubview(placeholderLabel)
placeholderLabel.frame.origin = CGPoint(x: 25, y: (textView.font?.pointSize)! / 2 + 12) …
Run Code Online (Sandbox Code Playgroud) 我希望我错了,但我一直无法找到与可编辑 UITextView 等效的 SwiftUI。因此,我使用 UIViewRepresentable 构建了一个。使用 ObservableObject 填充 SwiftUI 文本和我自己的视图有效 - 但在我的视图中所做的更新不会传播到 ObservableObject。我一定在绑定概念中遗漏了一些重要的东西。任何指导将不胜感激。
import SwiftUI
import Combine
struct ContentView: View {
@ObservedObject var myOText: MyOText
var body: some View {
ScrollView {
VStack {
Text("This is a bound Text View")
.padding(.top, 10)
.font(.headline)
Text(myOText.inTheCourse)
.lineLimit(3)
.padding()
Text("This is a multi-line UITextView wrapper:")
.font(.headline)
MultilineTextView(myOText: myOText)
.frame(height: 100)
.padding()
Spacer()
}
}
}
}
struct MultilineTextView: UIViewRepresentable {
@ObservedObject var myOText: MyOText
func makeUIView(context: Context) -> UITextView {
let view = …
Run Code Online (Sandbox Code Playgroud)