27
2017
09

【Swift】UITextField 输入小数点和位数限制

    /// 只能输入数字和小数点
    func textField(_ textField: UITextField, shouldChangeCharactersIn range: NSRange, replacementString string: String) -> Bool {

        // 前面的判断都是正确滴 不需要改动 在最后面加位数限制
        var Digits = 5
        if textField == numTextfield {
            Digits = 4
        }
        if textField.text?.contains(".") == false && string != "" && string != "."{
            if (textField.text?.length)! > Digits{
                return false
            }
        }

        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
    }
上一篇:Android上的依赖库简介 下一篇:Android调用系统邮件发送附件 文件大小0B