Desfazer / refazer com um UITextView (iOS / iPHone)
Eu tenho uma visão em que um UITextView sempre tem foco. O que eu quero fazer é estender o comportamento interno de desfazer / refazer para oferecer suporte a desfazer / refazer quando eu definir programaticamente o texto (por exemplo, para quando eu limpá-lo, definindo-o como @ "").
Como apenas o firstResponder obtém eventos de desfazer / refazer, pensei em usar a propriedade undoManager do UITextView para criar minhas invocações. por exemplo.,
// 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:@""]; } }
Infelizmente, isso não está funcionando. Isto:
Introduz um item vazio na pilha de desfazer ("Desfazer")O "Desfazer limpeza" é adicionado após esse item (se eu tocar em "Desfazer", vejo "Desfazer limpeza")Desfazer Limpar e Refazer trabalho claro, no entanto, vejo "Desfazer Limpar" novamente e não funciona a partir daí.Alguma ideia? Estou abordando isso errado?
Atualizar: Parece que eu descobri o problema de desfazer vazio: acontece quando eu defino o texto do UITextViewdepois de Eu chamei prepareWithInvocationTarget. Se eu ligar antes, isso não acontece. O engraçado é que o item vazio não é empurrado para a pilha de desfazer se eu não chamar o prepareWithInvocationTarget (ou seja, normalmente, quando eu definir o texto de um UITextView).