Como eu sei quando um atributo anexo está sendo adicionado à minha NSTextView?

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

  •  06-07-2019
  •  | 
  •  

Pergunta

Por causa da semântica de certos anexos NSTextView no meu aplicativo, eu quero saber quando eles são inseridos ou apagados do meu armazenamento de texto.

O meu subclasse de NSTextView implementa o shouldChangeTextInRange: replacementString: método, que me permite ver facilmente quando um anexo está prestes a ser substituído (posso pesquisar o armazenamento de texto no intervalo especificado)

.

Como a cadeia de substituição é apenas um NSString e não um NSAttributedString, eu não tenho nenhuma maneira de ver a partir deste método se um anexo está sendo inserido. A documentação vai ainda mais longe ao dizer que o texto poderá ser nulo se "somente atributos" estão sendo editadas.

Então a questão é, qual é o melhor ponto de override para ver quando um anexo está sendo inserido? Ou talvez tão útil: qual é o melhor ponto de override para ver quando atributos estão sendo modificados

Update: eu disse acima eu não tinha nenhuma maneira de saber se um anexo está sendo inserido. É apontado para mim que eu posso dizer que "um" apego está envolvido, porque a cadeia irá conter a magia NSAttachmentCharacter. Mas eu não vou ter informações específicas sobre o anexo até que a edição está completa.

Foi útil?

Solução

Gostaria de ter um olhar para o -textStorageDidProcessEditing método delegado NSTextStorage :, que deve ser chamado cada vez que uma alteração é feita para o armazenamento de texto subjacente. Você pode então usar o -editedRange, -editedMask e métodos -changeInLength para determinar que parte do armazenamento de texto foi alterado, e olhar nesse intervalo para quaisquer anexos que possam ser de seu interesse.

Outras dicas

Você pode querer dar uma olhada em dois métodos NSTextStorage delegado:

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

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

Dentro textStorageWill/DidProcessEditing, você pode chamar -[NSTextStorage editedMask] e -[NSTextStorage editedRange] para descobrir o que mudou e então agir em conformidade.

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top