主要是使用此函数:
func textField(textField: UITextField, shouldChangeCharactersInRange range: NSRange, replacementString string: String) -> Bool {
return true
}
返回值是true 表示允许修改,false 表示不允许修改 ,这样就可以限制它的内容输入了。
第一步理解函数:每次输入的时候:
range 包含当前输入字符的位置(在字符串中的位置,类似数组元素在数组中的位置)和长度
replacementString 表示当前输入的字符
第二步获取textField内的字符串:
函数内: let newString = (textField.text! as NSString).stringByReplacingCharactersInRange(range, withString: string)
就是把每次输入的字符跟之前textField 里的内容拼接起来,获得输入后的字符串
a: 特殊情况: 当第一次输入“.”的时候,不再允许输入:
if newString.hasPrefix(".") {
return false
}
b:一般情况:
else {
var flag = 0
let limited = 2
for var i = newString.characters.count - 1 ; i > 0; i-- {
if (newString as NSString).substringWithRange(NSRange(location: i, length: 1)) == "." {
if flag > limited {
return false
}
break
}
flag++
}
return true
}
从后向前循环找“.” 没找到就使状态标志位加1,找到的话刚好就是flag 值为3,返回false 不再能输入了
解释: 当输入的时候,newString实际上得到的是含有三个小数的字符串,也就是相当于循环了三次,flag的值就为3了
附录整的代码: