8

アプリケーション内の特定のNSTextView添付ファイルのセマンティクスのため、テキストストレージにいつ挿入または削除されるかを知りたいです。

NSTextViewのサブクラスはshouldChangeTextInRange:replacementString:メソッドを実装しています。これにより、添付ファイルがいつ置き換えられるかを簡単に確認できます(指定された範囲でテキストストレージを検索できます)。

置換文字列はNSStringであり、NSAttributedStringではないため、このメソッドから添付ファイルが挿入されているかどうかを確認する方法がありません。ドキュメントには、「属性のみ」が編集されている場合、文字列がnilになる可能性があるとさえ書かれています。

だから問題は、添付ファイルが挿入されているときに確認するための最良のオーバーライドポイントは何ですか?または、おそらく同じくらい便利です。属性が変更されているときに確認するのに最適なオーバーライドポイントは何ですか?

更新:上記で、添付ファイルが挿入されているかどうかを知る方法がないと言いました。文字列には魔法のNSAttachmentCharacterが含まれるため、「an」アタッチメントが含まれていることがわかります。ただし、編集が完了するまで、添付ファイルに関する具体的な情報はありません。

4

3 に答える 3

4

NSTextStorage デリゲート メソッド -textStorageDidProcessEditing: を見てみましょう。これは、基になるテキスト ストレージに変更が加えられるたびに呼び出す必要があります。次に、-editedRange、-editedMask、および -changeInLength メソッドを使用して、テキスト ストレージのどのセクションが変更されたかを判断し、その範囲内で関心のある添付ファイルを探すことができます。

于 2009-10-23T16:17:15.373 に答える
2

次の 2 つのNSTextStorageデリゲート メソッドを確認することをお勧めします。

- (void)textStorageWillProcessEditing:(NSNotification *)notification;
/* Delegate can change the characters or attributes */

- (void)textStorageDidProcessEditing:(NSNotification *)notification;
/* Delegate can change the attributes */

内部textStorageWill/DidProcessEditingでは、 と を呼び出し -[NSTextStorage editedMask]-[NSTextStorage editedRange]変更内容を確認し、それに応じてアクションを実行できます。

于 2009-10-23T16:21:50.170 に答える
0

デリゲート メソッドにはさまざまなコーナー ケースがあります。classをサブクラス化NSTextStorageすることをお勧めします。

于 2020-05-29T04:21:14.380 に答える