iOS开发中,经常会遇到要求对输入进行一些限制的需求,有些是限制输入的字数,有些是限制输入的内容。
输入功能的使用不是使用UITextView,就是使用UITextField。
下面就关于UITextField对于限制贴出如下代码(代码功能实现效果:5个整数位+1个小数点+2个小数位)
编码过程注意:
1、首个输入字符只能是1-9之间的数字;
2、只能输入一个小数点;
3、整数位只最多只能输入5位;
4、小数位最多只能输入2位;
步骤1 编码实现限制
- (BOOL)limitInputString:(NSString *)aString
{
//限制只能输入数字与小数点
NSCharacterSet *firstSet = [NSCharacterSet characterSetWithCharactersInString:@".0"];
NSCharacterSet *numberSet = [NSCharacterSet characterSetWithCharactersInString:@"123456789"];
NSCharacterSet *limitSet = [NSCharacterSet characterSetWithCharactersInString:@".0123456789"];
NSString *tempStr = aString;
if (tempStr.length == 1)
{
//首个输入不能为0或小数点
NSRange firstRange = [tempStr rangeOfCharacterFromSet:firstSet];
//但可以输入数字
NSRange numberRange = [tempStr rangeOfCharacterFromSet:numberSet];
if (firstRange.location != NSNotFound || numberRange.location == NSNotFound)
{
return NO;
}
}
else if (tempStr.length > 1)
{
//编辑状态中移动光标后,首个输入不能为0
NSString *firstString = [tempStr substringToIndex:1];
if ([firstString isEqualToString:@"0"] || [firstString isEqualToString:@"."])
{
return NO;
}
for (int i = 0; i < tempStr.length; i++)
{
NSString *subString = [tempStr substringWithRange:NSMakeRange(i, 1)];
//只能输入数字和小数点
NSRange numberRange = [subString rangeOfCharacterFromSet:limitSet];
if (numberRange.location == NSNotFound)
{
return NO;
}
}
//无小数点时,只能输入5个数字
NSRange pointRange = [tempStr rangeOfString:@"."];
if (pointRange.location == NSNotFound && 6 == tempStr.length)
{
return NO;
}
//存在小数点时,只能再输入两位小数,不能再输入小数点
if (pointRange.location != NSNotFound)
{
//只能有一个小数点
CGFloat limitlength = pointRange.location + pointRange.length;
NSString *temp = [tempStr substringFromIndex:limitlength];
if ([temp rangeOfString:@"."].location != NSNotFound)
{
return NO;
}
//小数点后两位
if (limitlength + 3 == tempStr.length)
{
return NO;
}
//存在小数时点,整数不足五位时,最多只能输入5位
NSString *subTemp = [tempStr substringToIndex:pointRange.location];
if (6 == subTemp.length)
{
return NO;
}
}
}
return YES;
}
步骤2 UITextField回调方法中调用
- (BOOL)textField:(UITextField *)textField shouldChangeCharactersInRange:(NSRange)range replacementString:(NSString *)string
{
if ([string isEqualToString:@"\n"])
{
return NO;
}
NSString *tempStr = [textField.text stringByReplacingCharactersInRange:range withString:string];
BOOL boolValue = [self limitInputString:tempStr];
return boolValue;
}
http://download.csdn.net/detail/potato512/7391099