Question

J'ai une vue de texte qui obtient son contenu à partir d'une chaîne attribuée stockée dans un objet modèle. Je liste plusieurs de ces objets de modèle dans un tiroir et lorsque l'utilisateur clique sur une vue de texte Swaps son contenu.

Je dois maintenant échanger aussi le gestionnaire d'annulation pour la vue texte. J'INITIALISER un gestionnaire de undo sur mon modèle d'objet et d'utiliser undoManagerForTextView pour le retourner à la vue du texte, mais quelque chose n'est pas tout à fait raison.

déclarations de journalisation placés stratégiquement me montrer que tout fonctionne comme prévu: au démarrage d'un nouvel objet modèle est initialisé correctement et un gestionnaire d'annulation non nul est toujours tirée par la vue du texte. Mais quand il s'agit de faire réellement défaire, je ne peux pas obtenir le comportement que je veux.

J'ouvre une fenêtre, tapez quelque chose et appuyez sur cmd + z, et défais œuvres. J'ouvre une fenêtre, tapez quelque chose, sélectionnez un nouveau modèle sur la table, le type quelque chose, revenir au premier modèle et essayer de défaire et tout ce que je reçois est un bip.

Quelque chose sur la la documentation m'a fait lever un sourcil, car cela signifierait que je ne peux pas avoir undo avec plusieurs objets de modèle:

  

La valeur par défaut annuler et rétablir le comportement   applique aux champs de texte et le texte dans   cellules aussi longtemps que le champ ou la cellule est   le premier intervenant (qui est, le   mise au point des actions de clavier). Une fois la   point d'insertion quitte le champ ou   cellule, les opérations antérieures ne peuvent pas être   défaits.

Était-ce utile?

La solution

Vous pouvez sous-classe NSUndoManager et passer outre removeAllActionsWithTarget: et removeAllActions, au moins pour les connecter, peut-être pour les rendre non-ops.

Ne pas oublier de instancier votre sous-classe au lieu du NSUndoManager d'origine. (Facile à oublier, et certains lecteurs peuvent ne pas se rendre compte qu'ils ont besoin de le faire.)

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