Wie kann ich wissen, wenn ein Anhang Attribut auf meine NSTextView hinzugefügt werden?

StackOverflow https://stackoverflow.com/questions/1614419

  •  06-07-2019
  •  | 
  •  

Frage

Aufgrund der Semantik bestimmter NSTextView Anhänge in meiner Anwendung, ich möchte wissen, wann sie eingesetzt werden oder aus meinem Textspeicher gelöscht.

Meine Unterklasse von NSTextView implementiert die shouldChangeTextInRange: replacementString: Methode, die ich zu sehen, auf einfache Weise ermöglicht, wenn eine Anlage über ersetzt werden soll (ich den Textspeicher im angegebenen Bereich suchen kann)

.

Da die Ersatzzeichenfolge ist nur ein NSString und kein NSAttributedString, habe ich keine Möglichkeit aus diesem Verfahren zu sehen, ob ein Anhang eingefügt wird. Die Dokumentation geht sogar so weit zu sagen, dass der Zeichenfolge Null sein kann, wenn „nur Attribut“ bearbeitet werden.

Die Frage ist also, was ist der beste Überschreibung Punkt zu sehen, wenn eine Anlage eingesetzt wird? Oder vielleicht als nützlich:? Was ist der beste Überschreibung Punkt zu sehen, wenn Attribute geändert werden

Update: Ich sagte oben ich keine Möglichkeit zu wissen hatte, ob eine Anlage eingesetzt wird. Es ist mir darauf hingewiesen, dass ich sagen kann, dass „eine“ Bindung beteiligt ist, da die Zeichenfolge die Magie NSAttachmentCharacter enthalten werden. Aber ich werde nicht spezifische Informationen über die Befestigung haben, bis die Bearbeitung abgeschlossen ist.

War es hilfreich?

Lösung

Ich würde einen Blick auf die NSTextStorage Delegatmethode -textStorageDidProcessEditing :, die jedes Mal, wenn eine Änderung der zugrunde liegenden Textspeicher wird aufgerufen werden soll. Anschließend können Sie verwenden, um die -editedRange, -editedMask und -changeInLength Methoden zu bestimmen, welcher Abschnitt des Textspeichers geändert wurde, und für alle Anlagen in diesem Bereich suchen, die für Sie von Interesse sein könnten.

Andere Tipps

Sie können einen Blick auf zwei NSTextStorage Delegatmethoden nehmen wollen:

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

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

Innerhalb textStorageWill/DidProcessEditing, können Sie -[NSTextStorage editedMask] und -[NSTextStorage editedRange] aufrufen, um herauszufinden, was sich verändert und dann entsprechend Maßnahmen ergreifen.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top