强制在UITextField中输入某些字符类型

时间:2010-06-09 12:57:02

标签: iphone objective-c uitextfield

如果我有一个用户正在输入注册号的UITextField,其格式为: 1111年11月11日

(即2位数字,短划线,2位数字,短划线,4位数字)

如何强制用户仅输入此类数据(因为他们实际上正在输入它)...因此他们不能在第一个字符中输入除0-9之外的任何内容,并且只能输入“ - ”第三个角色等。

3 个答案:

答案 0 :(得分:2)

从UX的角度来看,由于“ - ”字符是固定的,因此将keyboardType UITextField属性设置为UIKeyboardTypeNumberPad,将输入限制为0-9。

实施UITextFieldDelegate协议的textField:shouldChangeCharactersInRange:replacementString:方法并检查textField.text的长度,并在长度为2或5时自动追加' - '字符。当长度达到10个字符时,不接受任何新字符,只删除。

答案 1 :(得分:0)

您可以使用正则表达式检查输入并显示错误消息,如果格式错误。见here。或者您可以在破折号处拆分字符串并查看部分(例如,将它们转换为整数)(请参阅here)。

另一种(未经测试的和理论上的)方法是:将textfield委托设置为您的控制器:

myTextField.delegate = self

然后尝试:

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

答案 2 :(得分:0)

好的从另一篇文章中看出来

使用

   if (range.length != 1){
            NSCharacterSet *nonNumberSet = [[NSCharacterSet decimalDigitCharacterSet] invertedSet]; 
            returnValue = ([string stringByTrimmingCharactersInSet:nonNumberSet].length > 0);
        }