textfield使用过程中,很多时候有限制条件,虽然不难,但是细节上还是有很多要处理.代码中列出常见的细节bug,和解决方法.如有不足,欢迎指正.
1.限制字数后,delete键不能用. (如果自己第一次写,一般都会遇到)
2.首位数不能为0(如果把range传进来,更容易实现,且无bug)
// 第3个bug很容易忽略
3.输入数字后,移动光标在首位输入0;(如输入12,移动光标输入012)<下面方法没有修改这个bug,请自行修改(直接判断全部字符串的首位)>
1.方法调用
- (BOOL)textField:(UITextField *)textField shouldChangeCharactersInRange:(NSRange)range replacementString:(NSString *)string{
return [self validateNumber:textField.text andCharacter:string];
}
2.方法实现(根据自己需求改条件)
- (BOOL) validateNumber:(NSString *)number andCharacter:(NSString *)str {
// 当输入达到10个字符时候,delete键可用
if (str.length == 0)
{
return YES;
}
//首数字不能为0,没有需求可以删除
if ([str intValue] == 0)
{
if (number.length == 0)
{
return NO;
}
}
// 最多只能输入10位数
if (number.length > 9)//自己改
{
return NO;
}
BOOL res = YES;
// 只能输入数字,改成字母就只能输入字母(随个人需求)
NSCharacterSet* tmpSet = [NSCharacterSet characterSetWithCharactersInString:@"0123456789"];
int i = 0;
while (i < str.length) {
NSString * string = [str substringWithRange:NSMakeRange(i, 1)];
NSRange range = [string rangeOfCharacterFromSet:tmpSet];
if (range.length == 0)
{
res = NO;
break;
}
i++;
}
return res;
}