4

NSTextViewテキストがビュー全体に表示されるようにフォントサイズを自動的に調整するカスタム実装があります。

didChangeTextフォントサイズ調整メソッドの呼び出しを上書きしました。ユーザーがテキストを編集しているときはうまく機能しますが、テキストビューのコンテンツがバインディングを介して設定されているときはdidChangeText(およびデリゲートメソッド)は呼び出されません。textDidChange:

フォント調整コードは、ユーザーがテキストを変更したときだけでなく、テキストを設定/変更するたびに実行する必要があります。

NSTextViewバインディングを介してでも、テキストへのすべての変更を検出するにはどうすればよいですか?

注:フォントサイズを大きくする以外に、テキストをテキストビュー全体に表示するためのより良い方法がある場合は、お知らせください。

4

2 に答える 2

0

フォント属性をNSAttributedString、テキストビューの「attributedString」にバインドされているに設定することをお勧めします。デリゲートメソッドでは、正しいフォント属性を使用してをtextDidChange:再作成できます。NSAttributedString

于 2012-12-14T11:52:11.653 に答える
0

NSTextViewメソッドdidChangeTextは、バインディングがテキストを更新するときに呼び出されません(テキストビューがモデルを更新するのとは対照的です)。

didChangeTextは、バインディング更新のソースです。それを上書きしてsuperを呼び出さないと、バインディングが壊れます。didChangeTextは、デリゲートメソッドtextDidChangeを呼び出します。

残念ながら、didChangeTextは、NSTextViewの更新プロセスのかなり遅い段階(レイアウトおよびストレージデリゲートの呼び出し後)でも呼び出されます。

NSTextStorageDelegateメソッド「didProcessEditing」が、バインドされた文字列への変更をキャッチするための最良の方法であることがわかりました。この時点でテキストビューに戻すことができる変更に注意する必要がありますが、一部の呼び出しがクラッシュしました。

私はここで私自身の同様の質問にもっと完全に答えました: NSTextViewtextDidChangeはバインディングを介して呼び出されません

于 2019-02-11T08:43:31.263 に答える