Come faccio a sapere quando viene aggiunto un attributo allegato al mio NSTextView?

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

  •  06-07-2019
  •  | 
  •  

Domanda

A causa della semantica di alcuni allegati NSTextView nella mia applicazione, voglio sapere quando vengono inseriti o eliminati dalla mia memoria di testo.

La mia sottoclasse di NSTextView implementa il metodo shouldChangeTextInRange: replacementString: che mi permette di vedere facilmente quando un allegato sta per essere sostituito (posso cercare nella memoria di testo nell'intervallo specificato).

Poiché la stringa di sostituzione è solo una NSString e non una NSAttributedString, non ho modo di vedere da questo metodo se viene inserito un allegato. La documentazione arriva persino a dire che la stringa può essere nulla se "solo attributi" sono in fase di modifica.

Quindi la domanda è: qual è il miglior punto di override da vedere quando viene inserito un allegato? O forse altrettanto utile: qual è il miglior punto di override da vedere quando gli attributi vengono modificati?

Aggiornamento: ho detto sopra che non avevo modo di sapere se veniva inserito un allegato. Mi è stato fatto notare che posso dire che "un" l'allegato è coinvolto, poiché la stringa conterrà il NSAttachmentCharacter magico. Ma non avrò informazioni specifiche sull'allegato fino a quando la modifica non sarà completa.

È stato utile?

Soluzione

Vorrei dare un'occhiata al metodo delegato NSTextStorage -textStorageDidProcessEditing :, che dovrebbe essere chiamato ogni volta che viene apportata una modifica alla memoria di testo sottostante. Puoi quindi utilizzare i metodi -editedRange, -editedMask e -changeInLength per determinare quale sezione della memoria di testo è stata modificata e cercare in tale intervallo eventuali allegati che potrebbero interessarti.

Altri suggerimenti

Potresti dare un'occhiata a due metodi delegati NSTextStorage :

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

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

All'interno di textStorageWill / DidProcessEditing , puoi chiamare - [NSTextStorage editingMask] e - [NSTextStorage editingRange] per scoprire cosa è cambiato e quindi agire di conseguenza.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top