У меня есть представление, где UITextView всегда имеет фокус.То, что я хочу сделать, это расширить встроенное поведение отмены / повтора для поддержки отмены / повтора, когда я программно устанавливаю текст (например, когда я его очищаю, устанавливая его в @ "").
Поскольку только firstResponder получает события отмены / повтора, я подумал, что просто использую свойство undoManager UITextView для создания моих вызовов.например,
// 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:@""];
}
}
К сожалению, это не работает.Это:
- Вносит пустой элемент в стек отмены («Отменить»)
- «Отменить удаление» добавляется после этого элемента (если я нажимаю «Отменить», я вижу«Undo Clear»)
- Undo Clear и Redo Clear работают, однако, затем я снова вижу «Undo Clear», и с этого момента он не работает.
Есть идеи?Я подхожу к этому неправильно?
Обновление: Кажется, я выяснил проблему пустого элемента отмены: это происходит, когда я устанавливаю текст UITextView после Я позвонил prepareWithInvocationTarget.Если я позвоню раньше, этого не произойдет.Самое смешное, что пустой элемент не помещается в стек отмены, если я не вызываю prepareWithInvocationTarget (то есть, обычно, когда я устанавливаю текст UITextView).