Распуская цифровую клавиатуру
В моем приложении у меня есть текстовое поле, в которое вводится некоторое число от пользователя, поэтому я установил тип клавиатуры на "Цифровая клавиатура", но теперь я застрял в том, как я должен отклонить его, когда пользователь заканчивает ввод. я знаю, что должен использовать метод делегата "textfieldShouldReturn", но проблема в том, что на цифровой клавиатуре нет клавиши возврата. Так нужно ли добавлять настраиваемую клавишу готово на клавиатуре или есть какой-то другой выход?
4 ответа
Вам нужно добавить фоновый тап
-(IBAction)backGroundTap:(id)sender
в точке ч, а затем в файле точки м
-(IBAction)backGroundTap:(id)sender
[nameField resignFirstResponder];
[numberField resignFirstResponder];
Другое решение - Добавить inputAccessoryView
to yourNumberTextFiled
- (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
}
Ничего больше!