检查 UITextfield 中十进制输入的有效性
checking validity of decimal input in UITextfield
其中一个 UITextfield 输入应该接受小数。但我想限制用户只能输入一个“.”,否则如果有多个“.”,浮点转换就会搞砸。在数量上。如何确保用户不会键入多个“.”作为十进制输入的一部分?
func textField(_ textField: UITextField, shouldChangeCharactersIn range: NSRange, replacementString string: String) -> Bool {
if ( textField == areaTextField) {
guard CharacterSet(charactersIn: "0123456789.").isSuperset(of: CharacterSet(charactersIn: string)) else {
return false
}
}
return true
}
你的方法一开始就是错误的;你想多了。计算机已经知道一个字符串是否是一个有效的数字,所以只要问它就行了。不要检查任何字符。不要检查任何键。只需执行参数描述的替换并询问计算机结果是否为数字:
func textField(_ textField: UITextField, shouldChangeCharactersIn range: NSRange, replacementString string: String) -> Bool {
let rep = (textField.text! as NSString).replacingCharacters(in: range, with: string)
return rep.count == 0 || Double(rep) != nil
}
其中一个 UITextfield 输入应该接受小数。但我想限制用户只能输入一个“.”,否则如果有多个“.”,浮点转换就会搞砸。在数量上。如何确保用户不会键入多个“.”作为十进制输入的一部分?
func textField(_ textField: UITextField, shouldChangeCharactersIn range: NSRange, replacementString string: String) -> Bool {
if ( textField == areaTextField) {
guard CharacterSet(charactersIn: "0123456789.").isSuperset(of: CharacterSet(charactersIn: string)) else {
return false
}
}
return true
}
你的方法一开始就是错误的;你想多了。计算机已经知道一个字符串是否是一个有效的数字,所以只要问它就行了。不要检查任何字符。不要检查任何键。只需执行参数描述的替换并询问计算机结果是否为数字:
func textField(_ textField: UITextField, shouldChangeCharactersIn range: NSRange, replacementString string: String) -> Bool {
let rep = (textField.text! as NSString).replacingCharacters(in: range, with: string)
return rep.count == 0 || Double(rep) != nil
}