Как указать уведомления Sender? (Какао Touch)

Все примеры, которые я могу найти для настройки уведомления, выглядят так:

[nc addObserver: собственный селектор:@selector(клавиатура WillShow:) имя: объект UIKeyboardWillShowNotification: ноль];

где объект всегда устанавливается в ноль. Объектом является NotificationSender, который определен таким образом в документации:

"Объект, чьи уведомления хочет получить наблюдатель; то есть только уведомления, отправленные этим отправителем, доставляются наблюдателю. Когда ноль, центр уведомлений не использует отправителя уведомления, чтобы решить, следует ли доставлять его наблюдателю".

Я хочу получать уведомление клавиатуры только для одного конкретного текстового представления, поэтому я хочу сообщить об этом addObserver, но я не знаю, что дать его для объекта. Я попробовал переменную аутлета, которая привязана к интересующему меня текстовому представлению, но в результате я вообще не получил никаких уведомлений.

Какие-либо предложения?

3 ответа

Решение

UIKeyboardWillShowNotification исходит из вашего экземпляра окна, и для всех намерений и целей это "системное" уведомление. Клавиатура либо показывает, либо не показывает, на самом деле это не то, что связано с конкретным элементом управления.

Если вы хотите что-то сделать, когда пользователь вводит определенное текстовое поле, вы, вероятно, должны контролировать это в делегате текстового поля.

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

Спасибо за указатели!

В этом случае вы не можете получить уведомление только для одного конкретного текстового представления, поскольку в документе для UIKeyboardWillShowNotification написано "Объект уведомления равен нулю".

Вы должны проверить в вашей клавиатуре WillShow Impl, если ваш конкретный текстовый вид является FirstResponder.

Другие вопросы по тегам