2010-03-31 4 views
1

Как я могу проверить, вводит ли пользователь номер в моем UITextField. В основном это знак, который я принимаю от 0 до 100, и он может быть десятичным. Я слышал, что я могу попытаться преобразовать его в тип NSNumber и посмотреть, возвращает ли он значение null.UITextfield проверить, если его номер

Я пробовал:

if(grade.text doubleValue] == 0){ 
    //Not a number 
} 

но он все еще может принять "23F".

ответ

0

Используйте NSScanner для определения допустимого целого числа в строке.

NSScanner * scanner = [NSScanner scannerWithString:myTextField.text]; 
NSInteger * integer; 
if([scanner scanInteger:&integer]) { 
    // valid number found 
} else { 
    // cry about it 
} 

Вы можете улучшить это путем проверки текста в методе делегата UITextField textField:shouldChangeCharactersInRange:replacementString: запретить пользователю даже от ввода недопустимого значения.

+0

Использование 'scanDouble:' будет иметь тот же побочный эффект, что и 'doubleValue', позволяющий символ 'f', поскольку он указывает значения с плавающей запятой в C. Вместо этого вы можете использовать метод делегата для предотвращения пользователь вводит «f». – codewarrior

+0

Метод делегата, похоже, не работает, я связал элементы управления. Делегат – Jimmy

+0

«похоже, не работает» слишком расплывчато, нам понадобятся дополнительные сведения. – codewarrior

0

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

NSError *error = NULL; 
NSRegularExpression *regex = [NSRegularExpression regularExpressionWithPattern:@"[0-9\.]{1,2}|100" 
        options:NSRegularExpressionCaseInsensitive 
        error:&error]; 
NSUInteger matches = [regex numberOfMatchesInString:myTextField.text 
              options:0 
               range:NSMakeRange(0, [myTextField.text length])] 

Если совпадения равны 0 (совпадений не найдено), у вас нет номера, введенного в поле. Это просто с головы до ног - я еще не пробовал.

Смежные вопросы