Подтвердить что ты не робот

Iphone UITextField только целое число

У меня есть UITextField в моей IB, и я хочу проверить, введен ли пользователь только числа (no char) и получить целочисленное значение.

Я получаю целочисленное значение UITextField:

int integer = [myUITexrtField.text intValue];

Когда я помещаю символ (,;.), он возвращает мне 0, и я не знаю, как определить, что это не только числа.

Как я могу это сделать?

4b9b3361

Ответ 2

Реализация метода shouldChangeCharactersInRange, как показано ниже, не позволяет пользователю вводить нечисловые символы.

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

Это возвращает YES, если строка является числовой, и нет. [string isEqualToString @""] заключается в том, чтобы поддерживать обратный пробел для удаления.

Мне нравится этот подход, потому что он чист.

Ответ 3

Обязательно установите делегат текстового поля

Используйте следующую функцию, чтобы пользователь мог вводить только цифры:

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

    NSNumberFormatter *numberFormatter = [[NSNumberFormatter alloc] init];
    [numberFormatter setNumberStyle:NSNumberFormatterDecimalStyle];

    NSNumber* candidateNumber;

    NSString* candidateString = [textField.text stringByReplacingCharactersInRange:range withString:string];

    range = NSMakeRange(0, [candidateString length]);

    [numberFormatter getObjectValue:&candidateNumber forString:candidateString range:&range error:nil];

    if (([candidateString length] > 0) && (candidateNumber == nil || range.length < [candidateString length])) {

        return NO;
    }
    else 
    {
        return YES;
    }
}

Ответ 4

Попробуйте следующее: он запретит пользователю вводить любой символ, кроме цифр

- (BOOL)textField:(UITextField *)textField shouldChangeCharactersInRange:(NSRange)range replacementString:(NSString *)string
{
    NSCharacterSet *nonNumberSet = [[NSCharacterSet decimalDigitCharacterSet] invertedSet];

   if ([string rangeOfCharacterFromSet:nonNumberSet].location != NSNotFound) 
   {
       return NO;
   }
   return YES;
}

Ответ 5

Чтобы разрешить только числовой ввод:

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

Чтобы проверить целое число:

- (BOOL)isNumeric:(NSString *)input {
    for (int i = 0; i < [input length]; i++) {
        char c = [input characterAtIndex:i];
        // Allow a leading '-' for negative integers
        if (!((c == '-' && i == 0) || (c >= '0' && c <= '9'))) {
            return NO;
        }
    }
    return YES;
}

Ответ 6

Ответа на этот вопрос @devsan. Если пользователь вставляет что-либо с таким номером, как "1abc", ее код сломает

Это должно быть (разрешить замену, только если все символы являются цифрами):

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

Ответ 7

Вы также можете использовать метод UITextFieldDelegate

TextField: shouldChangeCharactersInRange: replacementString:

чтобы проверить, что каждый раз, когда пользователь нажимает клавишу, это простая цифра, так что он/она знает, что в поле вводится только значение int.

Ответ 8

Хотите разрешить отрицательные номера?

Разрабатывая ответ davsan, вот решение, которое поддерживает ввод отрицательного, а также положительные числа и запрещает что-либо еще.

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

    return YES;
}

Ответ 9

Этот код также работает с локализацией.

  - (BOOL)textField:(UITextField *)textField shouldChangeCharactersInRange:(NSRange)range replacementString:(NSString *)string
    {
        if([string isEqualToString:@""]) return YES;
        NSCharacterSet *characterSet = nil;
        characterSet = [NSCharacterSet decimalDigitCharacterSet];
        NSRange location = [string rangeOfCharacterFromSet:characterSet];
        return (location.location != NSNotFound);

        if(characterSet == nil) return YES;
        return YES;

    }