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
}