iPhone / iPad: проверьте наличие недопустимых символов в текстовом поле, предназначенном только для целых чисел - PullRequest
1 голос
/ 13 апреля 2010

Я заметил, что iPhone OS довольно хорошо выбирает целочисленные значения при запросе. В частности, если вы используете

NSString *stringName = @"6(";
int number = [stringName intValue];

iPhone OS выберет 6 и превратит число переменной в 6. Однако в более сложных неправильных типах это также делает переменную int 6:

NSString *stringName = @"6(5";
int number = [stringName intValue];

iPhone OS пропускает другую цифру, когда, возможно, пользователь пытался ввести число 65, ОС получает из него только номер 6. Мне нужно решение, чтобы проверить строку на наличие недопустимых символов и вернуть NO, если в текстовом поле есть что-либо, кроме целого числа без знака. Это для iPad, и в настоящее время нет цифровой клавиатуры, как у iPhone, и вместо этого я ограничен стандартной клавиатурой 123.

Я думал, что мне нужно использовать NSRange и каким-то образом перебрать всю строку в текстовом поле, и проверить, является ли текущий символ в итерации числом. Я потерян, насколько это возможно. Я могу подумать о проверке его на ноль, но ноль - это действительное целое число.

Может кто-нибудь помочь?

Ответы [ 4 ]

3 голосов
/ 13 апреля 2010

Реализуйте упомянутый метод NSResponder UITextFieldDelegate и проверьте строку замены с помощью метода NSString -rangeOfCharacterFromSet:, например:

- (BOOL)textField:(UITextField *)textField shouldChangeCharactersInRange:(NSRange)range replacementString:(NSString *)newString
{
    // create a character set containing everything except the decimal digits
    // (you might want to cache this, as inverting the set probably isn't fast)
    NSCharacterSet *nonNumericCharacters = [[NSCharacterSet decimalDigitCharacterSet] invertedSet];
    // and check whether there's a character in the string that's not in that set
    if([newString rangeOfCharacterFromSet:nonNumericCharacters].location != NSNotFound)
        return NO;
    return YES;
}
1 голос
/ 13 апреля 2010

Вы, вероятно, хотите использовать NSScanner

С помощью NSScanner вы можете сделать -scanInt:, затем проверить -isAtEnd

0 голосов
/ 13 апреля 2010
    - (BOOL)textField:(UITextField *)textField shouldChangeCharactersInRange:(NSRange)range replacementString:(NSString *)string
    {

            if([string isEqualToString:@"\b"] || [string isEqualToString:@"0"] ||  [string isEqualToString:@"1"] ||[string isEqualToString:@"2"] || [string isEqualToString:@"3"] || [string isEqualToString:@"4"] || [string isEqualToString:@"5"] || [string isEqualToString:@"6"] || [string isEqualToString:@"7"] || [string isEqualToString:@"8"] || [string isEqualToString:@"9"] || [string isEqualToString:@"."])
            {
                return YES;
            }
           else{
                return NO;
           }
}

Надеюсь, это поможет.

Спасибо,

Madhup

0 голосов
/ 13 апреля 2010

Я бы просто дал делегату UITextField вето на любую попытку вставить нечисловые символы. Смотри -textField:shouldChangeCharactersInRange:replacementString:

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...