J'ai une chaîne attribuée liée à un NSTextView. J'utilise une méthode appelée (en utilisant KVO) chaque fois que la chaîne est éditée pour ajouter des attributs de couleur d'arrière-plan à une chaîne basée sur une correspondance de regEx. Je fais cela en créant une nouvelle chaîne attributée mutable avec -initWithAttributedString:
puis -beginEditing
, , -endEditing
. Une fois que j'ai ajouté tous les attributs de couleur d'arrière-plan que je veux, j'appelle le setter de la chaîne [self setTextViewString:mutableAttributedString]
Le problème est que s'il y a des attributs ajoutés à la chaîne, il tue undo et déplace le curseur à la fin de la chaîne.Maintenir Annuler dans modifié, lié, NSAttributedString
Comment maintenir une annulation? J'ai maintenu la position du curseur en appelant les méthodes selectedRanges et setSelectedRanges: de chaque côté du setter, mais cela semble encore un peu hackish.
Je n'étais pas capable de lier directement la textview à la chaîne mutableattributed, mais il semble qu'il devrait y avoir un moyen plus direct de modifier la chaîne liée afin qu'elle ne gâche pas l'édition. PS, l'ajout d'attributs se produit après la fin de la méthode KVO en appelant -performSelectorOnMainThread:
C'était la seule façon d'afficher les attributs ajoutés.
Désolé, ce n'était pas clair et je l'ai changé pour avoir plus de sens. J'ai mon textview lié à une chaîne attribuée donc j'appelle le setter * string's *, pas un setter pour le textview lui-même. –