Как указать уведомления Sender? (Какао Touch)
Все примеры, которые я могу найти для настройки уведомления, выглядят так:
[nc addObserver: собственный селектор:@selector(клавиатура WillShow:) имя: объект UIKeyboardWillShowNotification: ноль];
где объект всегда устанавливается в ноль. Объектом является NotificationSender, который определен таким образом в документации:
"Объект, чьи уведомления хочет получить наблюдатель; то есть только уведомления, отправленные этим отправителем, доставляются наблюдателю. Когда ноль, центр уведомлений не использует отправителя уведомления, чтобы решить, следует ли доставлять его наблюдателю".
Я хочу получать уведомление клавиатуры только для одного конкретного текстового представления, поэтому я хочу сообщить об этом addObserver, но я не знаю, что дать его для объекта. Я попробовал переменную аутлета, которая привязана к интересующему меня текстовому представлению, но в результате я вообще не получил никаких уведомлений.
Какие-либо предложения?
3 ответа
UIKeyboardWillShowNotification
исходит из вашего экземпляра окна, и для всех намерений и целей это "системное" уведомление. Клавиатура либо показывает, либо не показывает, на самом деле это не то, что связано с конкретным элементом управления.
Если вы хотите что-то сделать, когда пользователь вводит определенное текстовое поле, вы, вероятно, должны контролировать это в делегате текстового поля.
У меня было две конкурирующие потребности - мне пришлось использовать уведомление клавиатуры, потому что мне нужно было получить высоту клавиатуры, которая, по-видимому, доступна только таким образом, но мне также нужно было знать, в каком текстовом представлении я находился, что означало также использование textViewDidBeginEditing делегировать. После долгих раздумий я наконец-то прибег к получению высоты клавиатуры в методе уведомлений и сохранению ее в переменной экземпляра, которая затем была доступна для использования в методе делегата (мне нужно прокрутить представление вверх, чтобы нижнее представление текста не было в основном скрытые под клавиатурой, когда они начинают печатать). Немного не элегантно, но это работает.
Спасибо за указатели!
В этом случае вы не можете получить уведомление только для одного конкретного текстового представления, поскольку в документе для UIKeyboardWillShowNotification написано "Объект уведомления равен нулю".
Вы должны проверить в вашей клавиатуре WillShow Impl, если ваш конкретный текстовый вид является FirstResponder.