J'ai une vue où un UITextView a toujours le focus. Ce que je veux faire est d'étendre le comportement d'annulation/rétablissement intégré pour prendre en charge annuler/refaire pour quand je programme par programme le texte (par exemple, pour quand je l'efface, en le mettant à @ "").Annuler/rétablir avec UITextView (iOS/iPHone)
Comme seul le firstResponder obtient des événements annuler/rétablir, j'ai pensé que j'utiliserais simplement la propriété undoManager de UITextView pour créer mes invocations. par exemple,
// Before clearing the text... [[self.myTextView.undoManager prepareWithInvocationTarget:self] undoClear:self.myTextView.text]; [self.myTextView.undoManager setActionName:@"Clear"]; // ... -(void)undoClear:(NSString *)textToRestore { self.myTextView.text = textToRestore; if ([self.myTextView.undoManager isUndoing]) { // Prepare the redo. [[self.myTextView.undoManager prepareWithInvocationTarget:self] undoClear:@""]; } }
Malheureusement, cela ne fonctionne pas. Il:
- Introduit un élément vide dans la pile undo (« Annuler »)
- Le « Annuler Effacer » est ajouté après l'article (si je tape « Annuler », je vois « Annuler Effacer »)
- Annuler Effacer et Rétablir Effacer le travail, cependant, je vois à nouveau "Annuler Effacer" et cela ne fonctionne plus à partir de là.
Des idées? Est-ce que je m'approche de ce problème?
Mise à jour: Il semble que j'ai compris la question de l'article undo vide: il arrive quand je mets le texte de la UITextView après j'ai appelé prepareWithInvocationTarget. Si je l'appelle avant, ça n'arrivera pas. Chose amusante, l'élément vide n'est pas poussé sur la pile d'annulation si je n'appelle pas prepareWithInvocationTarget (c'est-à-dire, normalement, lorsque je définis le texte d'un UITextView).
Salut, je pense que mon problème est similaire à cela, u peut me dire, dans quelle méthode vous appelez la méthode undoClear? merci –
@Risma: Juste avant de définir le contenu de textView. –
Un problème que j'ai cependant, en essayant d'implémenter cette méthode, est que tous les annulations antérieures sont effacées. Donc, si elles tapent, puis appuyez sur "effacer" et que vous souhaitez annuler deux fois, il va juste revenir à ce que leur contenu de texte était avant. – Philosophistry