Распуская цифровую клавиатуру

В моем приложении у меня есть текстовое поле, в которое вводится некоторое число от пользователя, поэтому я установил тип клавиатуры на "Цифровая клавиатура", но теперь я застрял в том, как я должен отклонить его, когда пользователь заканчивает ввод. я знаю, что должен использовать метод делегата "textfieldShouldReturn", но проблема в том, что на цифровой клавиатуре нет клавиши возврата. Так нужно ли добавлять настраиваемую клавишу готово на клавиатуре или есть какой-то другой выход?

4 ответа

Решение

Вам нужно добавить фоновый тап

-(IBAction)backGroundTap:(id)sender

в точке ч, а затем в файле точки м

-(IBAction)backGroundTap:(id)sender
[nameField resignFirstResponder];
[numberField resignFirstResponder];

Другое решение - Добавить inputAccessoryView to yourNumberTextFiled

inputAccessoryView

- (void)viewDidLoad
{
    [super viewDidLoad];

    UIToolbar* numberToolbar = [[UIToolbar alloc]initWithFrame:CGRectMake(0, 0, 320, 50)];
    numberToolbar.barStyle = UIBarStyleBlackTranslucent;
    numberToolbar.items = [NSArray arrayWithObjects:
                         [[UIBarButtonItem alloc]initWithTitle:@"Cancel" style:UIBarButtonItemStyleBordered target:self action:@selector(cancelNumberPad)],
                         [[UIBarButtonItem alloc]initWithBarButtonSystemItem:UIBarButtonSystemItemFlexibleSpace target:nil action:nil],
                         [[UIBarButtonItem alloc]initWithTitle:@"Apply" style:UIBarButtonItemStyleDone target:self action:@selector(doneWithNumberPad)],
                     nil];
    [numberToolbar sizeToFit];
    numberTextField.inputAccessoryView = numberToolbar;
}

-(void)cancelNumberPad{
    [numberTextField resignFirstResponder];
    numberTextField.text = @"";
}

-(void)doneWithNumberPad{
    NSString *numberFromTheKeyboard = numberTextField.text;
    [numberTextField resignFirstResponder];
}

Если вы знаете длину вводимого номера (например, 4-значный PIN-код), вы можете автоматически отклонить клавиатуру после ввода 4 клавиш.

Я столкнулся с проблемой отставки первого респондента после 4 клавиш (он проигнорировал бы последнее нажатие клавиши, если вы вернули YES после отставки, поэтому я добавил асинхронную задержку в отставку.

Этот код находится в делегате UITextField:

- (BOOL)textField:(UITextField *)textField shouldChangeCharactersInRange:(NSRange)range replacementString:(NSString *)string{

    // max 4 keypresses
    if(range.location == 3){
        // async workaround for can't return YES after resignFirstResponder 
        [self performSelector:@selector(closeKeypad:)
                   withObject:textField
                   afterDelay:0.1
         ];
    }
    else if(range.location > 3){        
        return NO;
    }
    return YES;
}

-(void) closeKeypad:(UITextField*)textField {
    [textField resignFirstResponder];

}

Другое решение, которое довольно легко реализовать и которое работает для изменения фокуса ввода или для отклонения клавиатуры.

Реализуйте эту функцию (и делегат UITextFieldDelegate):

- (BOOL)textField:(UITextField *)textField shouldChangeCharactersInRange:(NSRange)range replacementString:(NSString *)string;

Затем, когда вы хотите убрать клавиатуру или изменить фокус, вам просто нужно вызвать уведомитель следующим образом:

[self performSelector:@selector(focusNextField:) withObject:textField afterDelay:0.1];

И наконец, отклоните клавиатуру на этом:

- (void) focusNextField:(UITextField *) textField
{
    [textField resignFirstResponder];
    // some code
}

Ничего больше!

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