распуская цифровую клавиатуру - PullRequest
9 голосов
/ 27 июня 2010

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

Ответы [ 4 ]

42 голосов
/ 08 июля 2012

Другое решение - добавьте inputAccessoryView к вашему NumberTextFiled

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];
}
6 голосов
/ 27 июня 2010

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

-(IBAction)backGroundTap:(id)sender

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

-(IBAction)backGroundTap:(id)sender
[nameField resignFirstResponder];
[numberField resignFirstResponder];
4 голосов
/ 16 мая 2013

Если вам известна длина вводимого номера (например, 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];

}
0 голосов
/ 02 октября 2014

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

Реализовать эту функцию (и делегат 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
}

Ничего другого!

...