В моем приложении у меня есть текстовое поле, которое требует ввода некоторого числа от пользователя, поэтому я устанавливаю тип клавиатуры на "Number Pad", но теперь я застреваю в том, как я должен его отклонять, когда пользователь заканчивает ввод ввода. Я знаю, что мне нужно использовать метод делегата "textfieldShouldReturn", но проблема в том, что на цифровой клавиатуре нет ключа возврата. Нужно ли добавлять на клавиатуре пользовательский сделанный ключ или есть другой выход?
Отклонение номера
Ответ 1
Вам нужно добавить фоновое нажатие
-(IBAction)backGroundTap:(id)sender
в точке h, а затем в файле dot m
-(IBAction)backGroundTap:(id)sender
[nameField resignFirstResponder];
[numberField resignFirstResponder];
Ответ 2
Другое решение - добавьте inputAccessoryView
в 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];
}
Ответ 3
Если вам известна длина вводимого числа (например, четырехзначный PIN-код), вы можете автоматически отменить клавиатуру после ввода 4-х клавиш.
Я ударил проблему с отставкой первого ответчика после 4-х ключей (он проигнорировал бы последнее нажатие, если вы вернули ДА после увольнения, поэтому я добавил асинхронную задержку в отставку.
Этот код находится в делегате 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];
}
Ответ 4
Другое решение, которое довольно легко реализовать и которое работает для изменения фокуса ввода или для отклонения клавиатуры.
Реализовать эту функцию (и делегат 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
}
Больше ничего!