내 문제는 내 textView가 실행 취소/다시 실행 작업을 수행 할 수 있도록하는 것입니다.이 작업에는 두 개의 버튼을 사용합니다. UITextView에는 내장 된 undoManager가 있으며 그의 기본적인 사용법은 정말 간단하다는 것을 발견 한 문서를 읽습니다. 나는 지금까지 무엇을 했는가?일부 텍스트가 textView에 추가되면 iOS -NSUndoManager가 작동을 멈 춥니 다.
나는 textView를 포함하는 viewController (EditorViewController)를 가지고있다. EditorViewController.m에서
NSUndoManager *myUndoManager;
EditorViewcontroller.h
에서-> viewDidLoad에
myUndoManager = [textView undoManager];
내가 도스 두 개의 버튼에있는 두 개의 버튼은 작업을/취소를 수행 다시 실행하는 데 사용됩니다 말했듯 textView의 inputAccessoryView,이 뷰는 기본적으로 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 : 메서드를 사용하여 텍스트를 추가 할 때 실행 취소 및 다시 실행이 수행되지 않습니다. 키보드 실행 취소를 사용하여 다시 쓰기 시작하고 다시 실행이 수행됩니다 (실행 취소 스택의 첫 번째 요소는 마지막 텍스트로 작성 됨). 실행 취소 및 다시 실행 스택은 텍스트를 추가 할 때마다 지워집니다. 누군가가 나에게 힌트를 줄 수 있기를 바랍니다.