UITapGestureRecognizer и исчезновение клавиатуры при нажатии на фон - PullRequest
2 голосов
/ 06 сентября 2011

Я создал форму, и при вводе данных, подобных вашему возрасту, появляется клавиатура (только цифровая).

Я хочу, чтобы клавиатура исчезла, когда пользователь коснулся фона, и я хочу добавить кнопку «Готово» в пустой слот под цифрой 7 (рядом с нулем). (я использую клавиатуру цифровой клавиатуры)

Я нашел этот пример, но у меня есть несколько вопросов.

В

-(void)viewDidLoad
{
UITapGestureRecognizer *tap = [[UITapGestureRecognizer alloc] initWithTarget:self                                                                       action:@selector(dismissKeyboard)];  [self.view addGestureRecognizer:tap]; 
}

-(void)dismissKeyboard
{
[aTextField resignFirstResponder];
[aTextField1 resignFirstResponder];
[aTextField2 resignFirstResponder];
[aTextField3 resignFirstResponder];
}

Если в моей форме более одного текстового поля. Нужно ли мне писать каждое текстовое поле в методе dismissKeyboard?

Ответы [ 5 ]

14 голосов
/ 12 сентября 2011

Простой способ сделать это - использовать метод, предоставленный в UIView

- (BOOL) endEditing:(BOOL)force;

Этот метод просматривает текущее представление и его иерархию подпредставления для текстового поля, которое в настоящее время является первым респондентом.Если он находит его, он просит это текстовое поле подать в отставку в качестве первого респондента.Если для параметра force установлено значение YES, текстовое поле даже не запрашивается;он вынужден уйти в отставку.

Так что просто сделайте это:

-(void)dismissKeyboard {
     [self.view endEditing:YES];
}

, и он будет поддерживать любые другие текстовые поля, которые вы добавляете на свою страницу (конечно, под этим UIView)

5 голосов
/ 06 сентября 2011

Вы должны отправить dismissKeyboard только на тот textField, который вы сейчас редактируете.

В вашем коде есть утечка памяти. Лучше использовать это:

-(void)viewDidLoad
{
    UITapGestureRecognizer *tap = [[UITapGestureRecognizer alloc] initWithTarget:self action:@selector(dismissKeyboard)];
    [self.view addGestureRecognizer:tap]; 
    [tap release];
}

Чтобы проверить, находится ли UITextField в настоящее время в edit mode, вы можете проверить его свойство:

Логическое значение, указывающее, находится ли текстовое поле в данный момент в режиме редактирования. (Только для чтения)

@property(nonatomic, readonly, getter=isEditing) BOOL editing

Например, у вас есть 3 текстовых поля, тогда dismissKeyboard будет выглядеть примерно так:

-(void)dismissKeyboard
{
    UITextField *activeTextField = nil;
    if ([textField1 isEditing]) activeTextField = textField1;
    else if ([textField2 isEditing]) activeTextField = textField2;
    else if ([textField3 isEditing]) activeTextField = textField3;
    if (activeTextField) [activeTextField resignFirstResponder];
}
1 голос
/ 11 сентября 2011

Я использую ту же функциональность во многих моих приложениях. Вместо того чтобы использовать GestureRecognizer, я настроил свой вид как UIControl, а не UIView. Вы по-прежнему можете делать то же, что и с UIView, но вы также можете назначить IBActions для выполнения при взаимодействии с представлением.

Вот как это сделать: В Интерфейсном Разработчике выберите свое представление. Затем присвойте его класс UIControl. (Вероятно, в настоящее время он установлен как UIView.

В вашем ViewController для этого представления напишите метод IBAction для обнаружения backgroundTaps. Моя выглядит так:

- (IBAction)backgroundTap:(id)sender
{
    if ([textField1 isEditing]) {
        [textField1 resignFirstResponder];
    } else if ([textField2 isEditing]) {
        [textField2 resignFirstResponder];
    }
}

Наконец, в Интерфейсном Разработчике подключите созданный вами IBAction к UIControl.

0 голосов
/ 13 сентября 2011

Здесь я даю объект общего текстового поля. и присвоить ссылку на него в методе "textFieldShouldBeginEditing". это будет общим для всех текстовых полей ..

В этом случае вам нужно отклонить одно текстовое поле, которое будет скрывать клавиатуру.

объявить объект текстового поля в файле .h.

@interface RootViewController : UIViewController
{
    IBOutlet UITextField* txt_common;
}

IN .m файл

- (void)viewDidLoad {
[super viewDidLoad];
UITapGestureRecognizer *tap = [[UITapGestureRecognizer alloc] initWithTarget:self action:@selector(dismissKeyboard)];
[self.view addGestureRecognizer:tap]; 
[tap release];


}

-(void)dismissKeyboard
{
NSLog(@"hi");
[txt_common resignFirstResponder];
}

#pragma mark TextField methods
- (BOOL)textFieldShouldBeginEditing:(UITextField *)textField
{
NSLog(@"hi++++++++++++++++++");

txt_common=textField;
return YES;
}
0 голосов
/ 12 сентября 2011

Прочтите эту статью, она может вам помочь Написание кода iOS 4 для скрытия клавиатуры iPhone (Xcode 4)

...