J'ai une application basée sur un document simple qui crée simplement un fichier XML personnalisé. Il utilise une vue hiérarchique pour naviguer dans le document XML. Lorsqu'un élément de la vue hiérarchique est sélectionné, une vue personnalisée est affichée en tant que sous-vue de la vue de document, ce qui permet à l'utilisateur d'entrer des données. Sur l'une des vues a un NSTextField. Il a son ensemble de drapeaux "Allows Undo". J'ai testé pour s'assurer que le undoManager est appelé sur NSDocument lorsque l'édition est terminée. Ainsi, le contrôle semble rebondir à travers le premier répondant comme il se doit.Impossible d'enregistrer l'annulation à partir de NSTextField
Dans l'IBAction, j'utilise ActionName pour qu'il s'affiche correctement dans le menu. Maintenant, voici le problème. Non seulement le nom d'action n'est pas affiché dans le menu, mais le fait de cliquer sur Annuler n'inverse pas l'action effectuée sur le NSTextField mais l'action enregistrée juste avant. Y at-il quelque chose que j'ai oublié lors de la configuration de l'annulation avec NSTextField?
(IBAction) textFieldChanged: (id) sender {
... un code ici ...
[[self undoManager] setActionName: @ "du texte"];
}
Merci à l'avance, Rob
Le champ de texte et la vue de plan se trouvent dans la même fenêtre mais sur les différents côtés d'une vue éclatée. Supprimer et remplacer le champ de texte n'a pas fonctionné. Savez-vous si le gestionnaire d'annulation est appelé avant que IBAction ne soit appelé dans un champ de texte? – Rob
J'ai finalement réussi à le faire fonctionner. J'ai dû désactiver le "Autorise Annuler" dans IB, puis utiliser le délégué "- (BOOL) contrôle: (NSControl *) contrôle textShouldEndEditing: (NSText *) fieldEditor" et appelle la commande registerUndoWithTarget directement. – Rob