2010-03-21 7 views
0

J'ai une vue de texte qui obtient son contenu d'une chaîne attribuée stockée dans un objet de modèle. Je liste plusieurs de ces objets de modèle dans un tiroir et lorsque l'utilisateur clique sur un de ces objets, la vue de texte change son contenu.Plusieurs gestionnaires d'annulation pour une vue de texte

Je dois maintenant également permuter le gestionnaire d'annulation pour la vue de texte. J'initialise un gestionnaire d'annulation sur mon objet modèle et j'utilise undoManagerForTextView pour le renvoyer en mode texte, mais quelque chose ne va pas. Les instructions de journalisation placées stratégiquement me montrent que tout fonctionne comme prévu: au démarrage, un nouvel objet modèle est initialisé correctement et un gestionnaire d'annulation non nul est toujours tiré par la vue 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 annuler fonctionne. J'ouvre une fenêtre, tapez quelque chose, sélectionnez un nouveau modèle sur la table, tapez quelque chose, revenez au premier modèle et essayez de défaire et tout ce que je reçois est un bip.

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

Le undo par défaut et refaire le comportement applique aux champs de texte et texte cellules tant que le champ ou la cellule est le premier répondeur (c'est-à-dire le focus des actions du clavier). Une fois que le point d'insertion quitte le champ ou la cellule , les opérations antérieures ne peuvent pas être annulées.

Répondre

2

Vous pouvez sous-classe NSUndoManager et passer outre removeAllActionsWithTarget: et removeAllActions, au moins pour les connecter, peut-être pour les rendre pas d'habitation. N'oubliez pas d'instancier votre sous-classe à la place de NSUndoManager d'origine. (Facile à oublier, et certains lecteurs peuvent ne pas réaliser qu'ils ont besoin de faire cela.)

+0

Je pense que je vais aller avec Core Data. Si je transforme mon objet de modèle en entité gérée, je vais l'annuler gratuitement. – ruipacheco

+0

Votre méthode semble fonctionner très bien, pas besoin d'ajouter des données de base à l'application. Merci! – ruipacheco

Questions connexes