NSUndoManager не вызывает выбранный метод в iOS - PullRequest
0 голосов
/ 02 ноября 2010

ОК, поэтому у меня есть приложение с UITextView, которое я хочу продемонстрировать стандартным поведением отмены.Я просмотрел множество учебных пособий и ответов на этом сайте, а также Документы для разработчиков Apple, и я не могу понять, почему то, что я создал, не работает.

Всякий раз, когда изменяется UITextView (я использую нестандартная клавиатура с использованием свойства textView.inputView) нижеприведенному методу передается строка, представляющая собой новый текст, необходимый для представления текста:

- (void)setText:(NSString*)text{

NSString *oldText = [textView.text mutableCopy];

if (text != oldText) {

    [undoManager registerUndoWithTarget:self selector:@selector(setText:) object:oldText];  
    textView.text = text;

    }
}

, а затем для реализации отмены при нажатии кнопки UIB

[undoManager undo];

выполнено.

Я объявил undoManager в своем заголовочном файле, используя

NSUndoManager *undoManager;

, и синтезировал его в моей реализации, но когда я нажимаю UI-кнопку отмены, ничего не происходит, иsetText никогда не вызывается.Куда я иду не так?

1 Ответ

0 голосов
/ 11 ноября 2010

Я думаю, что инициализация undoManager все еще отсутствует в вашем примере. Вы заявляете

NSUndoManager *undoManager;

в вашем заголовочном файле, но я не вижу, где вы размещаете / инициализируете его.

Попробуйте добавить

undoManger = [NSUndoManager alloc] init];

в вас, т. Е. Метод viewDidLoad (или аналогичный). Не забудьте освободить соответствующий объект, когда он вам больше не нужен, например в dealloc.

...