美文网首页技术iOS
iOS判断textfield输入内容,只能有一个小数点,第一个数

iOS判断textfield输入内容,只能有一个小数点,第一个数

作者: Sylars | 来源:发表于2016-11-22 10:21 被阅读1776次

    我在优化App的时候,看到价格不能随意输入,于是就在网上找了点案例。发现有一款方法非常好,能控制你的textfield,首字符不能输入“0”或者“.”,控制小数点后面的分位数以及不让小数点出现两次。废话不多说,直接粘贴demo。

    图.png
    - (BOOL)textField:(UITextField *)textField shouldChangeCharactersInRange:(NSRange)range replacementString:(NSString *)string
    
    {
        
        if ([textField.text rangeOfString:@"."].location == NSNotFound)
        {
            isHaveDian = NO;
        }
        if ([string length] > 0)
        {
            unichar single = [string characterAtIndex:0];//当前输入的字符
            if ((single >= '0' && single <= '9') || single == '.')//数据格式正确
            {
                //首字母不能为0和小数点
                if([textField.text length] == 0)
                {
                    
                    if(single == '.')
                    {
                        
                        [self showMyMessage:@"亲,第一个数字不能为小数点!"];
                        
                        [textField.text stringByReplacingCharactersInRange:range withString:@""];
                        
                        return NO;
                        
                    }
                    
                    if (single == '0')
                    {
                        
                        [self showMyMessage:@"亲,第一个数字不能为0!"];
                        
                        [textField.text stringByReplacingCharactersInRange:range withString:@""];
                        
                        return NO;
                        
                    }
                    
                }
                
                //输入的字符是否是小数点
                
                if (single == '.')
                {
                    
                    if(!isHaveDian)//text中还没有小数点
                    {
                        
                        isHaveDian = YES;
                        
                        return YES;
                        
                    }else{
                        
                        [self showMyMessage:@"亲,您已经输入过小数点了!"];
                        
                        [textField.text stringByReplacingCharactersInRange:range withString:@""];
                        
                        return NO;
                        
                    }
                    
                }else{
                    
                    if (isHaveDian) {//存在小数点
                        
                        //判断小数点的位数
                        
                        NSRange ran = [textField.text rangeOfString:@"."];
                        
                        if (range.location - ran.location <= 2) {
                            
                            return YES;
                            
                        }else{
                            
                            [self showMyMessage:@"亲,您最多输入两位小数!"];
                            
                            return NO;
                            
                        }
                        
                    }else{
                        
                        return YES;
                        
                    }
                    
                }
                
            }else{//输入的数据格式不正确
                
                [self showMyMessage:@"亲,您输入的格式不正确!"];
                
                [textField.text stringByReplacingCharactersInRange:range withString:@""];
                
                return NO;
                
            }
            
        }
        
        else
            
        {
            
            return YES;
            
        }
        
    }
    
    -(void)showMyMessage:(NSString*)aInfo {
        
        UIAlertView *alertView = [[UIAlertView alloc] initWithTitle:@"提示" message:aInfo delegate:self cancelButtonTitle:@"确定" otherButtonTitles:nil, nil];
        
        [alertView show];
        
    }
    
    
    

    如果您觉得我的文章内容对您有帮助,请点赞+关注。我会推荐出更多有用的文章。

    相关文章

      网友评论

      • Haha_kd:还是去看看正则比较好
        Haha_kd:@Sylars ^([1-9][0-9]*)+(.[0-9]{1,2})?$ 我的意思是用正则就不用写那么多判断,就两三行代码
        Sylars:@Haha_kd 这是输出入的时候判定,不能输入,跟正则式是不同概念的兄弟。
      • 每天刷两次牙:哥们,你那俩 bool 值 有没有做初始化赋值
      • Ambitiones:厉害厉害

      本文标题:iOS判断textfield输入内容,只能有一个小数点,第一个数

      本文链接:https://www.haomeiwen.com/subject/wweppttx.html