输入限制(输入字数或输入内容限制)

来源:互联网 发布:卖家加入淘宝客 编辑:程序博客网 时间:2024/06/06 19:38

开发中,经常会遇到要求对输入进行一些限制的需求,有些是限制输入的字数,有些是限制输入的内容。

输入功能的使用不是使用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



0 0
原创粉丝点击