很多时候,我们的程序中需要限制输入框的内容,比如密码输入框只能输入数字
一般我使用以下两种方法:
1.设定键盘类型
TextField.keyboardType = UIKeyboardTypeDecimalPad; //键盘类型为数字
2.通过UITextField的代理方法:
- (BOOL)textField:(UITextField *)textField shouldChangeCharactersInRange:(NSRange)range replacementString:(NSString *)string {
return [self validateNumber:string];
}
- (BOOL)validateNumber:(NSString*)number {
BOOL res = YES;
NSCharacterSet* tmpSet = [NSCharacterSet characterSetWithCharactersInString:@"0123456789"];
int i = 0;
while (i < number.length) {
NSString * string = [number substringWithRange:NSMakeRange(i, 1)];
NSRange range = [string rangeOfCharacterFromSet:tmpSet];
if (range.length == 0) {
res = NO;
break;
}
i++;
}
return res;
}
自己动手过程中发现这样的算法比较繁琐,由于 0-9数字的ASCII值是连续的,所以决定使用ASCII码作为判断条件
- (BOOL)validateNumber:(NSString*)number {
if (number.length == 0) //删除操作
return YES;
int asciiCode = [number characterAtIndex:0];
if (asciiCode >= 48 && asciiCode <= 57)
return YES;
else
return NO;
}
很明显,这样判断比上面的效率高很多。
第一中方法比较生硬,使用起来较方便,但是除了数字类型键盘,其他的可以手动切换到其他输入法,所以第二种方法相对更加灵活,可以自由限定允许输入的类型。