Уроки iPhone SDK: (Часть 2) Программирование игр на iPhone. “Пишем” игру iTennis. Уроки iPhone SDK: Вывод сообщения “Loading…” поверх клавиатуры iPhone
Май 18

Те, кому приходилось создавать для iPhone приложения, требующие ввода числовых данных, наверняка знакомы с клавиатурой “UIKeyboardTypeNumberPad“. И они уже, конечно же, заметили, что ей не хватает одного важного элемента — в методе “UIKeyboardTypeNumberPad” нет клавиши “return“.

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

shotnodone

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

doneupdonedown

Возвращаемся к программированию. Для начала нужно узнать, когда цифровая клавиатура будет вызываться на экран, чтобы перед этим вставить дополнительную кнопку. Специально для этой цели предусмотрено отдельное уведомление, и регистрация в этом случае максимально проста:

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” на редактируемое текстовое поле.

shotwithdone

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

Исходный код скачать можно [здесь]

Текст оригинальной статьи на английском языке [здесь]

Уважаемые читатели, данный материал был переведен и подготовлен к публикации проектом LookApp.ru, при публикации на другом сайте ссылка на LookApp.ru обязательна.

1 звезда2 звезд3 звезд4 звезд5 звезд (Оцените приложение)
Загрузка ... Загрузка ...


Оставьте комментарий