前提・実現したいこと
こんにちは。現在SwiftUIで複数行の入力が可能なテキストボックスを使いたくて、AppKitのNSTextFeildをSwiftUIに埋め込もうとしています。
しかしどれだけ調べてもUIKit(iOS)のUITextViewをSwiftUIで使う方法しか出てきません。
ここの記事のソースコードを参考にしました。
3行目のUIViewRepresentableプロトコルをNSViewRepresentableプロトコルに変更して、そこから公式のドキュメントを読みながら色々といじくり回したのですが、上手くいきませんでした。
該当のソースコード(サイトから引用)
swift
1import SwiftUI 2 3struct MultilineTextView: UIViewRepresentable { 4 @Binding var text: String 5 6 final class Coordinator: NSObject, UITextViewDelegate { 7 private var textView: MultilineTextView 8 9 init(_ textView: MultilineTextView) { 10 self.textView = textView 11 } 12 13 func textView(_ textView: UITextView, shouldChangeTextIn range: NSRange, replacementText text: String) -> Bool { 14 return true 15 } 16 17 func textViewDidChange(_ textView: UITextView) { 18 self.textView.text = textView.text 19 } 20 } 21 22 func makeCoordinator() -> Coordinator { 23 Coordinator(self) 24 } 25 26 func makeUIView(context: Context) -> UITextView { 27 let textView = UITextView() 28 textView.delegate = context.coordinator 29 textView.isScrollEnabled = true 30 textView.isEditable = true 31 textView.isUserInteractionEnabled = true 32 return textView 33 } 34 35 func updateUIView(_ uiView: UITextView, context: Context) { 36 uiView.text = text 37 } 38} 39 40struct MultilineTextView_Previews: PreviewProvider { 41 static var previews: some View { 42 PreviewWrapper() 43 } 44 45 struct PreviewWrapper: View { 46 @State var text: String = "" 47 var body: some View { 48 MultilineTextView(text: $text) 49 } 50 } 51}
###試したこと
・3行目のUIViewRepresentableプロトコルをNSViewRepresentableプロトコルに変更して、そこから公式のドキュメントを読みながら色々といじくり回した。
・UITextView → NSTextField のように置き換えてみる。
###エラー
「Value of type 'NSTextField' has no member 'isUserInteractionEnabled'」
「Cannot assign value of type 'MultilineTextView.Coordinator' to type 'NSTextFieldDelegate?'」
アドバイスなどあればご教示頂けませんでしょうか。
よろしくお願いします。
環境
Xcode Version11.5
macOS Catalina(10.15.5)
回答1件
あなたの回答
tips
プレビュー