Как вызвать метод в классе ViewController из одного из его подпредставлений? - PullRequest
0 голосов
/ 07 марта 2012

Я хотел вытащить клавиатуру без использования текстового поля, поэтому я создал подкласс UIToolbar и привел его в соответствие с протоколом UIKeyInput.Основываясь на моих тестах с использованием простых распечаток NSLog, я успешно читаю вводимые пользователем ключи.Моя проблема в том, что мне нужен текст, который вводится на клавиатуре, чтобы обновить табличное представление, которое управляется тем же контроллером представления, что и моя пользовательская панель инструментов.По сути, мой вопрос заключается в следующем: если мой метод обновления находится в моем собственном классе панели инструментов, как мне сказать ему обновить представление таблицы?Или, если мой метод обновления находится в моем классе контроллера представления, как мне сделать так, чтобы он вызывался при каждом нажатии клавиши?

Я пытался, чтобы моя панель инструментов отправляла уведомление, когда клавиша была нажата вот так:

- (void)insertText:(NSString *)text {
    [[NSNotificationCenter defaultCenter] postNotificationName:@"keyPressed" object:self];

и последующее прослушивание с помощью контроллера представления

[[NSNotificationCenter defaultCenter] addObserver:self 
    selector:@selector(updateForKeyPressed:) name:@"keyPressed" object:nil];

...

- (void)updateForKeyPressed:(NSNotification *)note {
   [self update];
}

Это не сработало, но это неУдивление, поскольку я получил идею из интернет-статьи, и я вполне уверен, что делаю это неправильно.На этом этапе я в значительной степени нажимаю на кнопки, и было бы здорово, если бы кто-то указал мне правильное направление.Как всегда, любая помощь очень ценится.Если кто-то захочет увидеть больше моего кода, дайте мне знать, и я могу опубликовать его.

Ответы [ 2 ]

2 голосов
/ 07 марта 2012

Использование уведомлений должно работать нормально.Что вы сделали для отладки вашего кода?Вы уверены, что уведомление публикуется?Вы уверены, что контроллер представления зарегистрировался в центре уведомлений?Вы уверены, что -updateForKeyPressed: не вызывается?

Делегирование - это еще один вариант, который может быть проще настроить и отладить.Пусть контроллер представления устанавливает себя в качестве делегата панели инструментов, а панель инструментов отправляет сообщение своему делегату при каждом изменении его текста, как это делает UITextView.

Основная идея, которую следует иметь в виду, состоит в том, что ваши представления не должныТ заботиться о контроллере представления.Может случиться, что панель инструментов отправляет сообщения в контроллер представления, поскольку контроллер представления является его делегатом, но она не должна полагаться на тот факт, что его делегат является контроллером представления.

1 голос
/ 07 марта 2012

Вы должны иметь возможность заставить контроллер представления соответствовать uikeyinput, а затем установить делегата панели инструментов на viewcontroller

...