пересылка уведомления другому классу - PullRequest
0 голосов
/ 18 апреля 2010

Я использую этот метод

- (void)keyboardWillShow:(NSNotification *)notification

, который срабатывает при отображении клавиатуры.

Когда этот метод запускается, он получает уведомление, содержащее несколько параметров клавиатуры, таких как продолжительность анимации, кривая анимации и кадр. Мне нужно переслать это уведомление и все его параметры в другой класс. Итак, я попытался сделать это внутри клавиатурыWillShow:

[[NSNotificationCenter defaultCenter] 
 postNotificationName:@"doSomething" object:notification userInfo:nil];

Уведомление doSomething запускает метод doSomething для другого класса и имеет следующую форму:

- (void) doSomething:(NSNotification *)notification {

но когда я пытаюсь прочитать значения уведомлений для этого другого класса, используя, например,

myRect = [[[notification userInfo] objectForKey:UIKeyboardFrameEndUserInfoKey] CGRectValue];

Я получаю ноль для всех значений. Уведомление теряет свои параметры и не пересылается. Как я могу это сделать?

спасибо.

1 Ответ

4 голосов
/ 18 апреля 2010

Это теряет все значения, потому что вы передали ноль, когда вы создали новое уведомление! Вы должны передать словарь userInfo уведомлений клавиатуры, если вы хотите, чтобы это работало. Итак:

[[NSNotificationCenter defaultCenter] 
 postNotificationName:@"doSomething" object:self userInfo:userInfo];

В этом случае объектом, создающим это уведомление, является этот объект. Если вы хотите, чтобы это выглядело как исходящее от объекта клавиатуры, отправьте [notification object] для объекта, но я не рекомендую этого. Кроме того, почему бы просто не иметь класс, который вы хотите ответить на эти уведомления, ТАКЖЕ прослушивать уведомления клавиатуры? Создание и отправка нового уведомления с помощью функции обратного вызова для уведомлений с клавиатуры кажется мне несколько обременительной. Другой вариант - создать объект в стиле делегата, в котором класс (я предполагаю, что контроллер представления или что-то в этом роде?) Фактически прослушивает уведомления клавиатуры, затем вызывает объект делегата (другой класс, которому вы хотите переслать эту информацию) и передает словарь userInfo напрямую. Итак:

// Assume a proper delegate is set and it responds to - (void)doSomething:(NSDictionary*)userInfo
[delegate doSomething:userInfo]; // from within the keyboard notification

Тем не менее, я думаю, я бы просто попросил этот другой класс прослушивать уведомления клавиатуры.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...