美文网首页
UITextField(金融输入框)- Swift版

UITextField(金融输入框)- Swift版

作者: 努力奔跑的小男孩 | 来源:发表于2018-05-14 14:37 被阅读89次
    func textField(_ textField: UITextField, shouldChangeCharactersIn range: NSRange, replacementString string: String) -> Bool {
            if textField == self.finTF {
                let textOne = (textField.text) as! NSString
                print("textOne---\(textOne)")
                if textOne.length > 9{ // 位数限制
                    return textOne.length + string.count - range.length <= 9
                }else{
                    if textOne.range(of: ".").location == NSNotFound {
                        self.isHaveDian = false
                    }
                    if textOne.range(of: "0").location == NSNotFound{
                        self.isFirstZero = false
                    }
                    
                    let textTwo = string as! NSString
                    if textTwo.length > 0 {
                        let charsingle = textTwo.character(at: 0) as! UniChar// 当前输入的字符
                        let zeroChar = ("0" as NSString).character(at: 0) as! UniChar
                        let nineChar = ("9" as NSString).character(at: 0) as! UniChar
                        let dianChar = ("." as NSString).character(at: 0) as! UniChar
                        if ((charsingle >= zeroChar && charsingle <= nineChar) || charsingle == dianChar){ // 数据格式正确
                            
                            if textField.text?.count == 0{
                                if charsingle == zeroChar{ // 首字母不能为小数点
                                    return false
                                }
                                if charsingle == zeroChar{
                                    self.isFirstZero = true
                                    return true
                                }
                                
                            }
                            
                            
                            if charsingle == dianChar{
                                if !self.isHaveDian{ // text 中没有小数点
                                    self.isHaveDian = true
                                    return true
                                }else{
                                    return false
                                }
                            }else if(charsingle == zeroChar){
                                if ((self.isFirstZero && self.isHaveDian) || (!self.isFirstZero && isHaveDian)){ // 首位有0有. (0.01) 或首位没有.(10000.00)可输入两位
                                    if textField.text == "0.0"{
                                        return false
                                    }
                                    let ran = (textField.text as! NSString).range(of: ".")
                                    let tt = range.location - ran.location
                                    if tt <= 2{
                                        return true
                                    }else{
                                        return false
                                    }
                                }else if(self.isFirstZero && !self.isHaveDian){ // 首位有0没.不能再输入0
                                    return false
                                }else{
                                    return true
                                }
                            }else{
                                if self.isHaveDian{ // 存在小数点,保留两位数
                                    let ran = (textField.text as! NSString).range(of: ".")
                                    let tt = range.location - ran.location
                                    if tt <= 2{
                                        return true
                                    }else{
                                        return false
                                    }
                                }else if(self.isFirstZero && !self.isHaveDian){ // 首位有0没点
                                    return false
                                }else{
                                    return true
                                }
                            }
                            
                        }else{ // 输入的数据格式不正确
                            return false
                        }
                        
                    }else{
                        return true
                    }
                }
                
            }
            return true
        }
    
    
    

    相关文章

      网友评论

          本文标题:UITextField(金融输入框)- Swift版

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