UITextField 控制文本输入小数点和小数点后几位

22 篇文章 0 订阅
-(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 alertView:@"亲,第一个数字不能为小数点"];

//                    NSLog(@"亲,第一个数字不能为小数点");
//                    [CNHUD showHUD:@"亲,第一个数字不能为小数点" duration:1.5];
                    [_textField.text stringByReplacingCharactersInRange:range withString:@""];
                    return NO;

                }
//                if (single == '0') {
                    [self alertView:@"亲,第一个数字不能为0"];
                    NSLog(@"亲,第一个数字不能为0");
//                    [CNHUD showHUD:@"亲,第一个数字不能为0" duration:1.5];
//                    [_textField.text stringByReplacingCharactersInRange:range withString:@""];
//                    return YES;
//                    
//                }
            }
            if (single=='.')
            {
                if(!isHaveDian)//text中还没有小数点
                {
                    isHaveDian=YES;
                    return YES;
                }else
                {
//                    [self alertView:@"亲,您已经输入过小数点了"];

//                    NSLog(@"亲,您已经输入过小数点了");
//                    [CNHUD showHUD:@"亲,您已经输入过小数点了" duration:1.5];
                    [_textField.text stringByReplacingCharactersInRange:range withString:@""];
                    return NO;
                }
            }
            else
            {
                if (isHaveDian)//存在小数点
                {
                    //判断小数点的位数
                    NSRange ran=[_textField.text rangeOfString:@"."];
                    int tt=range.location-ran.location;
                    if (tt <= 2){
                        return YES;
                    }else{
//                        [self alertView:@"亲,您最多输入两位小数"];

//                        [CNHUD showHUD:@"亲,您最多输入两位小数" duration:1.5];
//                        NSLog(@"亲,您最多输入两位小数");
                        return NO;
                    }
                }
                else
                {
                    return YES;
                }
            }
        }else{//输入的数据格式不正确
//            [self alertView:@"亲,您输入的格式不正确"];
//            NSLog(@"亲,您输入的格式不正确");
//            [CNHUD showHUD:@"亲,您输入的格式不正确" duration:1.5];
            [_textField.text stringByReplacingCharactersInRange:range withString:@""];
            return NO;
        }
    }
    else
    {
        return YES;  
    }  


}

【Swift】

    /// 只能输入数字和小数点
    func textField(_ textField: UITextField, shouldChangeCharactersIn range: NSRange, replacementString string: String) -> Bool {
        let scanner = Scanner(string: string)
        let numbers : NSCharacterSet
        let pointRange = (textField.text! as NSString).range(of: ".")

        if (pointRange.length > 0) && pointRange.length < range.location || pointRange.location > range.location + range.length {
            numbers = NSCharacterSet(charactersIn: "0123456789.")
        }else{
            numbers = NSCharacterSet(charactersIn: "0123456789.")
        }

        if textField.text == "" && string == "." {
            return false
        }

        let remain = 2

        let tempStr = textField.text!.appending(string)

        let strlen = tempStr.length

        if pointRange.length > 0 && pointRange.location > 0{//判断输入框内是否含有“.”。
            if string == "." {
                return false
            }

            if strlen > 0 && (strlen - pointRange.location) > remain + 1 {//当输入框内已经含有“.”,当字符串长度减去小数点前面的字符串长度大于需要要保留的小数点位数,则视当次输入无效。
                return false
            }
        }

        let zeroRange = (textField.text! as NSString).range(of: "0")
        if zeroRange.length == 1 && zeroRange.location == 0 { //判断输入框第一个字符是否为“0”
            if !(string == "0") && !(string == ".") && textField.text?.length == 1 {//当输入框只有一个字符并且字符为“0”时,再输入不为“0”或者“.”的字符时,则将此输入替换输入框的这唯一字符。
                textField.text = string
                return false
            }else {
                if pointRange.length == 0 && pointRange.location > 0 {//当输入框第一个字符为“0”时,并且没有“.”字符时,如果当此输入的字符为“0”,则视当此输入无效。
                    if string == "0" {
                        return false
                    }
                }
            }
        }
//        let buffer : NSString!
        if !scanner.scanCharacters(from: numbers as CharacterSet, into: nil) && string.length != 0 {
            return false
        }
        return true
    }
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值