如果我有一个用户正在输入注册号的UITextField,其格式为: 1111年11月11日
(即2位数字,短划线,2位数字,短划线,4位数字)
如何强制用户仅输入此类数据(因为他们实际上正在输入它)...因此他们不能在第一个字符中输入除0-9之外的任何内容,并且只能输入“ - ”第三个角色等。
答案 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);
}