Так что моя проблема в том, чтобы сделать мой 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: метод, отмена и повтор не выполняются. Если я начинаю писать снова с использованием клавиатуры, отмена и повтор выполняются (первый элемент стека отмены - последний написанный текст) стек отмены и возврата очищается каждый раз, когда я добавляю какой-либо текст. Я надеюсь, что кто-то может дать мне подсказку ..