【发布时间】:2011-08-05 09:45:00
【问题描述】:
我需要验证 UITextField。我只想在其中输入正整数。我怎样才能做到这一点?
【问题讨论】:
标签: iphone uitextfield
我需要验证 UITextField。我只想在其中输入正整数。我怎样才能做到这一点?
【问题讨论】:
标签: iphone uitextfield
添加 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 表示你只能写这些字
【讨论】:
if(textField == xxx) 或使用它的标签,如 if(textField.tag == xxx.tag) xxx 是你的 textField 实例。
LEAGELNUM 是拼写错误。我想你的意思是LEGALNUM。
我设置了一个NSNumberFormatter 来从 UITextFields 文本属性中检索一个数字。然后从数字中获取一个 intValue 并检查它是否 >= 0。
更新:
NSNumberFormatter *formatter = [[NSNumberFormatter alloc] init];
[formatter setLocale:[NSLocale currentLocale]];
NSNumber *number = [formatter numberFromString:[textField text]];
[formatter release];
这应该会让你继续前进。我现在不在我的开发机器上,所以我无法测试运行它,也许你需要再做一两行设置。有关可用选项,请参阅参考库(我在上面发布了链接)。
【讨论】:
将委托设置为您的UITextField ivar。将keyboardType属性设置为UIKeyboardTypeNumberPad
写下这段代码。
- (BOOL)textField:(UITextField *)textField shouldChangeCharactersInRange:(NSRange)range replacementString:(NSString *)string{
if ([string isEqualToString:@"-"]){
return NO;
}
return YES;
}
【讨论】:
UIKeyboardTypeNumberPad
从我的头顶:
使用[textField.text intValue] 将字符串转换为整数并检查它是否为正数。
我会在UITextFieldDelegate 协议的- (BOOL)textFieldShouldEndEditing:(UITextField *)textField 方法中执行此操作。
干杯
【讨论】:
使用这个答案的逻辑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
}
【讨论】: