|
Май
18
|
Те, кому приходилось создавать для iPhone приложения, требующие ввода числовых данных, наверняка знакомы с клавиатурой “UIKeyboardTypeNumberPad“. И они уже, конечно же, заметили, что ей не хватает одного важного элемента — в методе “UIKeyboardTypeNumberPad” нет клавиши “return“.
Для любого другого типа клавиатуры (кроме практически аналогичной “UIKeyboardTypePhonePad“) можно задать возможность исчезновения, настроив свойство “returnKeyType” для соответствующего реализатора “UITextInputTraits“. Как же добиться этого с цифровой клавиатурой? Способ есть!
Взгляните на цифровую клавиатуру — и увидите свободное место внизу слева. Вот туда мы и вставим нашу собственную клавишу “return“.

Буду краток: делаете снимок, вырезаете клавишу возврата, поворачиваете её горизонтально, удаляете с нее символ в Photoshop’е и накладываете текст, который будет красоваться на новой клавише “return“. В нашем примере это будет “DONE“. Теперь у нас есть изображение для нашей кнопки элемента “UIControlStateNormal“. Повторяем те же действия с нажатой на снимке клавишей возврата и получаем второе изображение — для “UIControlStateHighlighted“. Вот и результат:


Возвращаемся к программированию. Для начала нужно узнать, когда цифровая клавиатура будет вызываться на экран, чтобы перед этим вставить дополнительную кнопку. Специально для этой цели предусмотрено отдельное уведомление, и регистрация в этом случае максимально проста:
1 2 3 4 | [[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(keyboardWillShow:) name:UIKeyboardWillShowNotification object:nil]; |
Не забудьте удалить наблюдателя (observer) из центра уведомлений, когда все будет закончено.
1 | [[NSNotificationCenter defaultCenter] removeObserver:self]; |
Переходим к сути дела. Все, что нам нужно от метода “keyboardWillShow” — найти представление клавиатуры и добавить к нему собственную кнопку. Здесь http://www.iphonedevsdk.com/forum/iphone-sdk-development/6275-add-toolbar-top-keyboard.html уже говорилось о том, что представление клавиатуры — часть второго “UIWindow” нашего приложения. Поэтому добавим ссылку на это окно (в большинстве случаев это будет второе окно, поэтому выражение “objectAtIndex:1” в приведенном ниже коде является верным), проследим его иерархию в представлении “View“, отыщем клавиатуру и добавим внизу слева нашу кнопку.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 | - (void)keyboardWillShow:(NSNotification *)note { // создаем пользовательскую кнопку UIButton *doneButton = [UIButton buttonWithType:UIButtonTypeCustom]; doneButton.frame = CGRectMake(0, 163, 106, 53); doneButton.adjustsImageWhenHighlighted = NO; [doneButton setImage:[UIImage imageNamed:@"DoneUp.png"] forState:UIControlStateNormal]; [doneButton setImage:[UIImage imageNamed:@"DoneDown.png"] forState:UIControlStateHighlighted]; [doneButton addTarget:self action:@selector(doneButton:) forControlEvents:UIControlEventTouchUpInside]; // находим представление клавиатуры UIWindow* tempWindow = [[[UIApplication sharedApplication] windows] objectAtIndex:1]; UIView* keyboard; for(int i=0; i<[tempWindow.subviews count]; i++) { keyboard = [tempWindow.subviews objectAtIndex:i]; // представление найдено; добавляем к нему кнопку if([[keyboard description] hasPrefix:@"<UIKeyboard"] == YES) [keyboard addSubview:doneButton]; } } |
Вуаля! Вот она! Пустое место для кнопки начинается с координаты (0, 163), а размеры составляют (106, 53). Теперь нужно прописать метод “doneButton“, но проблем это больше не составит. Один момент: чтобы клавиатура уезжала вниз, не забудьте вызвать “resignFirstResponder” на редактируемое текстовое поле.

Примечание: в бета-версии iPhone OS 3.0 дизайн клавиатуры несколько изменился. Соответственно, положение и форму нашей кнопки нужно будет адаптировать под новый дизайн.



Последние комментарии
Подскажите пожалуйста… Вот...
Код не открывает страницы по простой причине -...