1

私は NSTextView を使用しており、その-textStorageプロパティにデリゲートを設定しています。を受け取っ-textStorageDidProcessEditing:たら、テキストの一部に属性を適用する必要があります。

属性が適用されていますが、編集を行う-will...に常にテキストに適用されますdid...

実行中のこの時点でレイアウト マネージャーが最近のグリフの挿入/削除を認識していないかのように、NSTextView/NSTextStorage がデリゲート メソッドを呼び出しレイアウト マネージャーに更新を通知すると仮定します。

これを機能させるために、レイアウトマネージャーを強制的に更新してすぐに有効にする方法はありますか?

私はNSTextStorage-addAttribute:value:range:メソッドを認識しており、この時点までそれらを正常に使用してきましたが、リファクタリング/最適化の演習の一環として、代わりにレイアウト マネージャーを介してこれを行う必要がある時点に達しました。

4

1 に答える 1

1

この問題の解決策を見つけました。-textStorageDidProcessEditing:NSTextStorageとNSLayoutManagerの両方の通知のデリゲートとして登録すると-didInvalidateLayout:、テキストストレージデリゲートからの操作を効果的に「キューに入れる」ことができます。これは、レイアウトマネージャーデリゲートが安全であるという通知を受け取った場合にのみ実行されます。

于 2010-11-02T02:43:23.910 に答える