Отменить / повторить с помощью UITextView (iOS / iPHone)
У меня есть представление, где 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 и Redo Clear работают, затем я снова вижу «Undo Clear», и с этого момента он не работает.Есть идеи? Я подхожу к этому неправильно?
Обновить: Похоже, я понял проблему пустого элемента отмены: это происходит, когда я устанавливаю текст UITextViewпосле Я назвал prepareWithInvocationTarget. Если я позвоню раньше, этого не произойдет. Забавно то, что пустой элемент не помещается в стек отмены, если я не вызываю prepareWithInvocationTarget (то есть, обычно, когда я устанавливаю текст UITextView).