Как скрыть цифровую клавиатуру с помощью фона Нажмите?

Я изучаю iOS SDK, используя эту книгу, и в 4 главе, где рассказывается, как скрыть цифровую клавиатуру с помощью фонового нажатия, у меня возникла проблема. Я так и делаю, что автор говорит, но ничего не произошло. Как я могу это сделать? Что говорит автор книги:

1) Создайте новый метод backgroundTap в ViewController.h

- (IBAction)touchBackground:(id)sender;

2) Добавить метод в ViewController.m

-(void)touchBackground:(id)sender{
[nameField resignFirstResponder];
[numberField resignFirstResponder];}

3) Измените идентичность класса объекта View в Interface Builder(как я понимаю в Xcode 4 его элемент управления) с UIView на UIControl

4) Соедините метод TouchDown в списке событий с владельцем файла и проверьте метод backgroundTap.

Это мои примеры кода

PS Прошу прощения за мой английский, я перевел всю информацию из книги на английский, потому что у меня есть русский перевод.

3 ответа

Решение

Я думаю, что вы могли бы сделать это проще, просто реализовав такой метод:

- (IBAction)backgroundTouched:(id)sender {
    [self.view endEditing:YES];
}

сделать фоновый вид UIControl вместо UIView в построителе интерфейса и подключите событие touchsup к этому методу.

Посмотрите на этот небольшой пример проекта. Я сделал именно это в secondViewController где при касании фона распускается клавиатура. Вы также можете увидеть, как я изменил фон на UIControl в secondViewController.xib

Что-то, что вы можете попробовать, не меняя фоновый вид, это:

- (void)touchesEnded:(NSSet *)touches withEvent:(UIEvent *)event {
    [nameField resignFirstResponder];
    [numberField resignFirstResponder];
}

Возможно, вы выполнили шаг 4 ("метод Connect TouchDown в списке событий с владельцем файла и проверьте метод backgroundTap") неправильно. Включите NSLog в ваш метод touchBackground, чтобы проверить, вызывается ли метод.

-(void)touchBackground:(id)sender{
[nameField resignFirstResponder];
[numberField resignFirstResponder];
NSLog(@"touchBackground was called");
}

Если сообщение ("touchBackground был вызван") не отображается в вашей консоли, значит, вы знаете, что touchBackground не вызывается.

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