UITextField应该只有正数

时间:2011-08-05 09:45:01

标签: iphone uitextfield

我需要验证UITextField。我只想在其中输入正整数。我怎样才能做到这一点?

5 个答案:

答案 0 :(得分:6)

添加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意味着你只能写这些单词

答案 1 :(得分:4)

我设置了一个NSNumberFormatter来从UITextFields文本属性中检索一个数字。然后从数字中获取一个intValue并检查它是否为> = 0。

<强>更新

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

[formatter setLocale:[NSLocale currentLocale]];

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

[formatter release];

这应该让你去。我现在不在我的开发机器上,所以我无法测试运行它,也许你需要做一两行设置。有关可用选项,请参阅参考库(我在上面的链接中发布)。

答案 2 :(得分:1)

将委托设置为UITextField ivar。将keyboardType属性设置为UIKeyboardTypeNumberPad 写下这段代码。

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

    return YES;  
}

答案 3 :(得分:0)

从头到尾:

使用[textField.text intValue]将字符串转换为整数,并检查它是否为正数。 我会在- (BOOL)textFieldShouldEndEditing:(UITextField *)textField协议的UITextFieldDelegate方法中执行此操作。

干杯

答案 4 :(得分:0)

使用此答案的逻辑Toastor

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
}