Comment savoir si un attribut de pièce jointe est ajouté à mon NSTextView?

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

  •  06-07-2019
  •  | 
  •  

Question

En raison de la sémantique de certaines pièces jointes NSTextView dans mon application, je souhaite savoir quand elles sont insérées ou supprimées de mon stockage de texte.

Ma sous-classe de NSTextView implémente la méthode shouldChangeTextInRange: replacementString: qui me permet de voir facilement quand une pièce jointe est sur le point d'être remplacée (je peux rechercher le stockage de texte dans la plage spécifiée).

Etant donné que la chaîne de remplacement est simplement une chaîne NSString et non une chaîne NSAttributedString, je n’ai aucun moyen de voir si cette pièce jointe est insérée. La documentation va même jusqu'à dire que la chaîne peut être nulle si "d'attributs seulement" sont en cours de modification.

La question est donc de savoir quel est le meilleur point de contournement lorsqu’une pièce jointe est insérée. Ou peut-être aussi utile: quel est le meilleur point de substitution pour savoir quand des attributs sont modifiés?

Mise à jour: J'ai dit ci-dessus que je n'avais aucun moyen de savoir si une pièce jointe était insérée. On m'a fait remarquer que je peux dire que "un" pièce jointe est impliquée, car la chaîne contiendra le magique NSAttachmentCharacter. Mais je ne disposerai d’informations spécifiques sur la pièce jointe qu’une fois l’édition terminée.

Était-ce utile?

La solution

Je jetterais un coup d'oeil à la méthode de délégué NSTextStorage -textStorageDidProcessEditing :, qui devrait être appelée chaque fois qu'une modification est apportée au stockage de texte sous-jacent. Vous pouvez ensuite utiliser les méthodes -editedRange, -editedMask et -changeInLength pour déterminer quelle section du stockage de texte a été modifiée et rechercher dans cette plage les éventuelles pièces jointes susceptibles de vous intéresser.

Autres conseils

Vous pouvez jeter un oeil sur deux méthodes de délégation NSTextStorage :

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

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

À l'intérieur de textStorageWill / DidProcessEditing , vous pouvez appeler - [NSTextStorage éditéMask] et - [NSTextStorage éditéRange] pour connaître les modifications apportées. agissez en conséquence.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top