¿Cómo puedo saber cuándo se está agregando un atributo de adjunto a mi NSTextView?

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

  •  06-07-2019
  •  | 
  •  

Pregunta

Debido a la semántica de ciertos archivos adjuntos de NSTextView en mi aplicación, quiero saber cuándo se insertan o eliminan de mi almacenamiento de texto.

Mi subclase de NSTextView implementa el método shouldChangeTextInRange: replacementString:, que me permite ver fácilmente cuándo se va a reemplazar un archivo adjunto (puedo buscar el almacenamiento de texto en el rango especificado).

Debido a que la cadena de reemplazo es solo una NSString y no una NSAttributedString, no tengo forma de ver en este método si se está insertando un archivo adjunto. La documentación llega incluso a decir que la cadena puede ser nula si " solo atributos " se están editando.

La pregunta es, ¿cuál es el mejor punto de anulación para ver cuándo se inserta un archivo adjunto? O tal vez sea útil: ¿cuál es el mejor punto de reemplazo para ver cuándo se modifican los atributos?

Actualización: dije anteriormente que no tenía forma de saber si se está insertando un archivo adjunto. Me han indicado que puedo decir que " una " el adjunto está involucrado, porque la cadena contendrá el NSAttachmentCharacter mágico. Pero no tendré información específica sobre el archivo adjunto hasta que se complete la edición.

¿Fue útil?

Solución

Echaría un vistazo al método de delegado NSTextStorage -textStorageDidProcessEditing :, que debería llamarse cada vez que se realice un cambio en el almacenamiento de texto subyacente. Luego puede usar los métodos -editedRange, -editedMask, y -changeInLength para determinar qué sección del almacenamiento de texto se cambió, y buscar en ese rango cualquier adjunto que pueda ser de su interés.

Otros consejos

Es posible que desee ver dos métodos de delegado NSTextStorage :

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

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

Dentro de textStorageWill / DidProcessEditing , puede llamar a - [NSTextStorage editedMask] y - [NSTextStorage editedRange] para averiguar qué ha cambiado y luego tomar medidas en consecuencia.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top