Итак, моя проблема состоит в том, чтобы сделать мой textView способным отменить / повторить действие (для этого я использую две кнопки). Читая документ, я обнаружил, что UITextView имеет встроенный undoManager, и его базовое использование действительно простое. Что я сделал до сих пор?
У меня есть viewController (EditorViewController), содержащий textView.
в EditorViewcontroller.h
NSUndoManager *myUndoManager;
в EditorViewController.m -> viewDidLoad
myUndoManager = [textView undoManager];
как я сказал, две кнопки используются для выполнения действий отмены / повтора, две кнопки расположены в inputAccessoryView textView, это представление в основном представляет собой панель инструментов с несколькими кнопками, используемыми для добавления текста в textView.
У меня есть метод appendText:
- (IBAction) appendText:(id)sender{
NSString *contentsToAdd;
NSMutableString *textViewContent;
NSRange cursorPosition;
if ([undoManager canUndo]) {
NSLog(@"yes canundo");
}
switch ([sender tag]) {
case 0:
[textView setScrollEnabled:NO];
contentsToAdd = @"[]";
cursorPosition = [textView selectedRange];
textViewContent = [[NSMutableString alloc]
initWithString:[textView text]];
[textViewContent insertString:contentsToAdd
atIndex:cursorPosition.location];
[textView setText:textViewContent];
[textViewContent release];
cursorPosition.location++;
textView.selectedRange=cursorPosition;
[textView becomeFirstResponder];
[textView setScrollEnabled:YES];
if (![undoManager canUndo]) {
NSLog(@" can't undo");
}
break;
// more case following 0..9
case 10:
[myUndoManager undo];
[break];
case 11 :
[myUndoManager redo];
break;
}
Теперь все работает хорошо, если я пишу с клавиатуры, я имею в виду, что отмена и повтор работают правильно. Но когда я добавляю текст с помощью метода appendText:, отмена и повтор не выполняются. Если я снова начинаю писать с помощью клавиатуры, выполняются отмена и повтор (первый элемент стека отмены - это последний записанный текст) Это как если бы стек отмены и повтора очищается каждый раз, когда я добавляю текст. Надеюсь, кто-нибудь мне подскажет ..