RichTextView 是一个UIView包。它不能像下面这样使用。
import SwiftUI
import RichTextView
struct ContentView1: View {
var body: some View {
VStack {
RichTextView( // <-- Wrong!
input: "Test",
latexParser: LatexParser(),
font: UIFont.systemFont(ofSize: UIFont.systemFontSize),
textColor: UIColor.black,
isSelectable: true,
isEditable: false,
latexTextBaselineOffset: 0,
interactiveTextColor: UIColor.blue,
textViewDelegate: nil,
frame: CGRect.zero,
completion: nil
)
}
}
}
我还发现了一个引用 如何为SwiftUI包装一个自定义的UIView? 作为以下。
struct TextView: UIViewRepresentable {
@Binding var text: String
func makeUIView(context: Context) -> UITextView {
return UITextView()
}
func updateUIView(_ uiView: UITextView, context: Context) {
uiView.text = text
}
}
struct ContentView : View {
@State var text = ""
var body: some View {
TextView(text: $text)
.frame(minWidth: 0, maxWidth: .infinity, minHeight: 0, maxHeight: .infinity)
}
}
但我尝试了很多方法来使用 RichTextView
与 UIViewRepresentable
. 还是不行。如下所示。
struct RichTextView: UIViewRepresentable {
@Binding var text: String
let richTextView = RichTextView(
input: text, <-- Cannot use instance member 'text' within property initializer; property initializers run before 'self' is available
latexParser: LatexParser(),
font: UIFont.systemFont(ofSize: UIFont.systemFontSize),
textColor: UIColor.black,
isSelectable: true,
isEditable: false,
latexTextBaselineOffset: 0,
interactiveTextColor: UIColor.blue,
textViewDelegate: nil,
frame: CGRect.zero,
completion: nil
)
func makeUIView(context: Context) -> UITextView {
return UITextView()
}
func updateUIView(_ uiView: UITextView, context: Context) {
uiView.text = richTextView <--- changed
}
}
已更新。下面还是不行
struct RichTextView: UIViewRepresentable { <-- Error:Type 'RichTextView' does not conform to protocol 'UIViewRepresentable'
@Binding var text: String
func makeUIView(context: Context) -> RichTextView {
return RichTextView( <-- Error:Extra arguments at positions #1, #2, #3, #4, #5, #6, #7, #8, #9, #10, #11 in call
input: text, <-- Error:Missing argument for parameter 'text' in call
latexParser: LatexParser(),
font: UIFont.systemFont(ofSize: UIFont.systemFontSize),
textColor: UIColor.black,
isSelectable: true,
isEditable: false,
latexTextBaselineOffset: 0,
interactiveTextColor: UIColor.blue,
textViewDelegate: nil,
frame: CGRect.zero,
completion: nil
)
}
func updateUIView(_ richTextView: RichTextView, context: Context) {
richTextView.text = text
}
}
如何使之?谢谢大家的帮助。
我想你要找的是更多的类似这样的东西。
struct RichTextView: UIViewRepresentable {
@Binding var text: String
func makeUIView(context: Context) -> RichTextView {
return RichTextView(
input: text,
latexParser: LatexParser(),
font: UIFont.systemFont(ofSize: UIFont.systemFontSize),
textColor: UIColor.black,
isSelectable: true,
isEditable: false,
latexTextBaselineOffset: 0,
interactiveTextColor: UIColor.blue,
textViewDelegate: nil,
frame: CGRect.zero,
completion: nil
)
}
func updateUIView(_ richTextView: RichTextView, context: Context) {
richTextView.text = text
}
}
UIViewRepresentable
使用swift属名意味着你可以指定相关的视图类型,在这种情况下,你只需返回 RichTextView
.
我还没有测试过这个,所以可能需要一些调整,但希望它能给你指出正确的方向。