【问题标题】:UITextField should have only positive numberUITextField 应该只有正数
【发布时间】:2011-08-05 09:45:00
【问题描述】:

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

【问题讨论】:

标签: iphone uitextfield


【解决方案1】:

添加 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!
  • 嘿,如果我只想限制一个文本框但使用另一个输入文本呢?
  • @Wezly 你可以检查 textField 是否是你需要限制的实例。使用 if(textField == xxx) 或使用它的标签,如 if(textField.tag == xxx.tag) xxx 是你的 textField 实例。
  • 如果不知道,LEAGELNUM 是拼写错误。我想你的意思是LEGALNUM
【解决方案2】:

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

更新:

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

[formatter setLocale:[NSLocale currentLocale]];

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

[formatter release];

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

【讨论】:

  • 您能否举个例子(通过编辑您的答案),我如何使用 NSFormatter 检查文本字段是否只有正数?
  • 完成 - 不过,Bonny 的回答仍然更好 :)
【解决方案3】:

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

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

    return YES;  
}

【讨论】:

  • 如果用户没有输入数字怎么办。如果用户输入了 ) 或 -?
  • 设置textField的keyboardType属性为UIKeyboardTypeNumberPad
  • 数字键盘有一些特殊符号。如何检查用户是否输入了特殊符号?
  • UIKeyboardTypeNumberPad 没有 ) 字符。根据 if ([string isEqualToString:@"-"])
  • 哇,UIKeyboardTypeNumberPad 除了数字之外什么都没有:)。它只会是正值。
【解决方案4】:

从我的头顶:

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

干杯

【讨论】:

    【解决方案5】:

    使用这个答案的逻辑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
    }
    

    【讨论】:

      猜你喜欢
      • 2012-05-30
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-03-11
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多