Чтобы сделать его коротким: сделайте снимок экрана, вырежьте весь ключ возврата, отразите его по горизонтали, очистите его символ возврата в Photoshop и наложите на него текст, который мы хотим на нашей клавише return . Мы выбрали его для маркировки DONE .
Теперь у нас есть изображение для пользовательской кнопки UIControlStateNormal.
Повторите всю процедуру (с нажатой клавишей Backspace при создании снимка экрана), чтобы получить второе изображение для кнопки UIControlStateHighlighted
.
Вот результат: <<em> отсутствует изображение >
Теперь вернемся к кодированию:
Для начала нам нужно знать, когда цифровая клавиатура будет скользить вверх по экрану, чтобы мы могли подключить нашу пользовательскую кнопку до того, как это произойдет.
К счастью, есть уведомление именно для этой цели, и зарегистрироваться для него так же просто, как:
[[NSNotificationCenter defaultCenter] addObserver:self
selector:@selector(keyboardWillShow:)
name:UIKeyboardWillShowNotification
object:nil];
Не забудьте удалить наблюдателя из центра уведомлений в соответствующем месте, как только вы закончите со всем этим :
[[NSNotificationCenter defaultCenter] removeObserver:self];
Теперь мы подошли к сути. Все, что нам нужно сделать в методе keyboardWillShow
, - это найти вид клавиатуры и добавить к нему нашу кнопку.
Представление клавиатуры является частью второго UIWindow нашего приложения, как уже поняли другие (см. Эту ветку).
Таким образом, мы берем ссылку на это окно (в большинстве случаев это будет второе окно, поэтому objectAtIndex:1
в приведенном ниже коде хорошо), просмотрим его иерархию представлений, пока мы не найдем клавиатуру и не добавим кнопку в ее нижний левый угол:
- (void)keyboardWillShow:(NSNotification *)note {
// create custom button
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];
// locate keyboard view
UIWindow* tempWindow = [[[UIApplication sharedApplication] windows]
objectAtIndex:1];
UIView* keyboard;
for(int i=0; i<[tempWindow.subviews count]; i++) {
keyboard = [tempWindow.subviews objectAtIndex:i];
// keyboard view found; add the custom button to it
if([[keyboard description] hasPrefix:@"UIKeyboard"] == YES)
[keyboard addSubview:doneButton];
}
}
Вуаля, вот и все!
Пустое пространство для нашей кнопки начинается с координаты (0, 163) и имеет размеры (106, 53).
Конечно, метод doneButton
должен быть написан сейчас, но это уже не сложно. Просто убедитесь, что вы вызываете resignFirstResponder
в текстовом поле, которое редактируется, чтобы клавиатура сдвинулась вниз.
Мы «СДЕЛАНЫ».