UITextField должен иметь только положительное число - PullRequest
2 голосов
/ 05 августа 2011

Мне нужно подтвердить UITextField. Я хочу, чтобы в него входили только натуральные числа. Как мне этого добиться?

Ответы [ 5 ]

6 голосов
/ 05 августа 2011

Добавьте UITextFieldDelegate и добавьте этот код в свой класс

#define LEAGELNUM @"0123456789"
- (BOOL)textField:(UITextField *)textField shouldChangeCharactersInRange:(NSRange)range replacementString:(NSString *)string {
        NSCharacterSet *cs = [[NSCharacterSet characterSetWithCharactersInString:LEAGELNUM] invertedSet];
        NSString *filtered = [[string componentsSeparatedByCharactersInSet:cs]     componentsJoinedByString:@""];
        BOOL basicTest = [string isEqualToString:filtered];
        return basicTest;
}

LEAGELNUM означает, что вы можете писать только эти слова

4 голосов
/ 05 августа 2011

Я бы настроил NSNumberFormatter для получения числа из текстового свойства UITextFields.Затем получите intValue из числа и проверьте, является ли он> = 0.

Обновление:

NSNumberFormatter *formatter = [[NSNumberFormatter alloc] init];

[formatter setLocale:[NSLocale currentLocale]];

NSNumber *number = [formatter numberFromString:[textField text]];

[formatter release];

Это должно помочь вам.Я сейчас не на своей машине для разработки, поэтому я не могу выполнить ее тестирование, возможно, вам нужно выполнить еще одну или две строки настройки.Пожалуйста, обратитесь к справочной библиотеке (я разместил ссылку выше) для доступных опций.

1 голос
/ 05 августа 2011

Установите делегата на ваш UITextField ivar.Установите для свойства keyboardType значение UIKeyboardTypeNumberPad Введите этот код.

- (BOOL)textField:(UITextField *)textField shouldChangeCharactersInRange:(NSRange)range replacementString:(NSString *)string{  
    if ([string isEqualToString:@"-"]){  
        return NO;  
    }  

    return YES;  
}
0 голосов
/ 09 марта 2016

Используйте логику этого ответа Тостор

func textField(textField: UITextField, shouldChangeCharactersInRange range: NSRange, replacementString string: String) -> Bool {

    if (string.characters.count == 0) {
        return true
    }
    /// check number is postive
    if (textField == self.txtPay) {
        let formatter = NSNumberFormatter()
        formatter.locale = NSLocale.currentLocale()
        let findalString = (textField.text! as NSString).stringByReplacingCharactersInRange(range, withString: string)
        let number = formatter.numberFromString(findalString)
        return number?.integerValue > 0
    }

    return true
}
0 голосов
/ 05 августа 2011

С макушки моей головы:

Преобразуйте строку в целое число, используя [textField.text intValue], и убедитесь, что она положительная. Я бы сделал это методом - (BOOL)textFieldShouldEndEditing:(UITextField *)textField из протокола UITextFieldDelegate.

Приветствия

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