Проверка времени выполнения в UItextField - PullRequest
1 голос
/ 02 апреля 2011

Я хочу, чтобы на моем UITextField выполнялась проверка во время выполнения, т. Е. Когда пользователь начинает вводить данные, он должен подтвердить и вывести сообщение об ошибке, если оно не правильно. Как мне реализовать эту функцию?

textfieldDidChange или textFieldShouldEndEditing могут вам чем-нибудь помочь?

Любой учебник?

Ответы [ 2 ]

4 голосов
/ 02 апреля 2011

Вы можете реализовать метод textField:shouldChangeCharactersInRange:replacementString: для делегата вашего текстового поля, отклоняя любые символы, которые недопустимы для вашего текстового поля. Дополнительную информацию смотрите в справочнике UITextFieldDelegate .

Например, если вы хотите разрешить ввод только десятичных чисел, вы можете использовать:

- (BOOL) textField:(UITextField *)textField shouldChangeCharactersInRange:(NSRange)range replacementString:(NSString *)string {
    NSCharacterSet *nonNumberSet = [[NSCharacterSet decimalDigitCharacterSet] invertedSet];
    return ([string stringByTrimmingCharactersInSet:nonNumberSet].length > 0);
}

Это на самом деле не выдает сообщение об ошибке, если ввод неправильный; вместо этого он предотвратит ввод неправильных символов.

Если вы хотите, чтобы пользователь мог вводить недопустимые символы, а они выдают ошибку, вы можете реализовать это в методе textFieldShouldEndEditing: вашего делегата.

3 голосов
/ 09 мая 2012

Это лучшее решение, поскольку оно допускает возврат. Взято из: блога Хьюго Ларчера

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

NSCharacterSet *nonNumberSet;
if (textField == self.priceField) //allow decimals
    nonNumberSet=[[NSCharacterSet characterSetWithCharactersInString:@"0123456789."] invertedSet];
else
    nonNumberSet=[[NSCharacterSet characterSetWithCharactersInString:@"0123456789"] invertedSet];

// allow backspace
if (range.length > 0 && [string length] == 0) {
    return YES;
}
// do not allow . at the beggining
if (range.location == 0 && [string isEqualToString:@"."]) {
    return NO;
}
// set the text field value manually
NSString *newValue = [[textField text] stringByReplacingCharactersInRange:range withString:string];
newValue = [[newValue componentsSeparatedByCharactersInSet:nonNumberSet] componentsJoinedByString:@""];
textField.text = newValue;
    // return NO because we're manually setting the value
    return NO;
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...