macOS アプリで、ユーザーがテキストを入力できるシート ポップアップを作成しようとしています。ユーザーがテキストを追加したら、[保存] をクリックしてシートを閉じ、前のページの NSTextView にテキストを追加します。私はこれの多くのバリエーションを試しましたが、正直なところ、2 つの ViewController 間でデータを渡す方法さえわかりません。iOSのみのように見えるPerformSegueを試しました。UserDefaults().string(forKey:"") に保存しようとしましたが、何も機能していないようです。最後に、他の ViewController クラスを参照し、そのクラスから関数を実行する方法を見つけましたが、機能していないようです。これが私がこれまでに持っているコードです(何かが欠けている場合は、関連するすべてのコードを追加しようとしました)。
これは、テキストを追加するビューに接続された ViewContoller です。
class NotesViewController: NSViewController {
override func draw(_ dirtyRect: NSRect) {
super.draw(dirtyRect)
}
@IBOutlet var notesTextView: NSTextView!
func updateCaseTemplate(template: Any) {
notesTextView.textStorage?.mutableString.setString(template as! String)
}
これは、ユーザーのテキストを取得しようとしている ViewController です。
class TemplateViewController: NSViewController {
private var notesView: NotesViewController?
@IBOutlet weak var notesTemplateTextView: NSTextView!
@IBAction func saveNotesTemplate(_ sender: Any) {
var notesTemplate = notesTemplateTextView.textStorage?.mutableString
notesView?.updateCaseTemplate(template: notesTemplate!)
dismissViewController(self)
}
}
saveNotesTemplate で print(notesTemplate!) を実行でき、NSTextView! から正しいテキストが表示されます。func updateCaseTemplate() に Break を設定すると、それに到達することはありません。どんな助けでも大歓迎です。私は本当にここで学ぼうとしており、これに対する解決策を見つけるためにできる限りのことをグーグルで検索しました。
最後に、これが完全に間違っていて、より良い方法がある場合はお知らせください。