Отклонение номера

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

Ответ 1

Вам нужно добавить фоновое нажатие

-(IBAction)backGroundTap:(id)sender

в точке h, а затем в файле dot m

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

Ответ 2

Другое решение - добавьте inputAccessoryView в 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];
}

Ответ 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
}

Больше ничего!