UITextField(金融输入框)- Swift版

2018-05-14  本文已影响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
    }


上一篇下一篇

猜你喜欢

热点阅读