我正在学习iOS开发,并试图阻止UITextField具有多个十进制值的值,例如“45.3.1”和字母字符。
防止字母字符功能无法正常工作。如果我在文本字段中输入数字时打印alphabeticString
,我会得到nil
但是当我输入“a”这样的字符时打印alphabeticString
我得到一个可选范围。出于某种原因,即使alphabeticString
打印为nil,当插入字符时,我的if语句也会返回true。
有什么原因吗?感谢。
func textField(textField: UITextField,
shouldChangeCharactersInRange range: NSRange,
replacementString string: String) -> Bool {
let existingTextHasDecimalSeperator = textField.text?.rangeOfString(".")
let replacementTextHasDecimalSeparator = string.rangeOfString(".")
let alphabeticString = string.rangeOfCharacterFromSet(NSCharacterSet.letterCharacterSet())
if existingTextHasDecimalSeperator != nil && replacementTextHasDecimalSeparator != nil && alphabeticString != nil {
return false
}
else {
return true
}
}
答案 0 :(得分:1)
func textField(textField: UITextField, shouldChangeCharactersInRange range: NSRange, replacementString string: String) -> Bool {
switch string {
case "0","1","2","3","4","5","6","7","8","9":
return true
case ".":
if let _ = textField.text?.rangeOfString("."){
return false
}else{
return true
}
default:
if let _ = string.rangeOfCharacterFromSet(NSCharacterSet.letterCharacterSet()){
return false
}
return true
}
}
使用“十进制键盘”键盘类型?
如果由于某种原因你不想这样做,试试这个:
if
编辑:我认为我在代码中发现了问题,您需要将func textField(textField: UITextField, shouldChangeCharactersInRange range: NSRange, replacementString string: String) -> Bool {
let existingTextHasDecimalSeperator = textField.text?.rangeOfString(".")
let replacementTextHasDecimalSeparator = string.rangeOfString(".")
let alphabeticString = string.rangeOfCharacterFromSet(NSCharacterSet.letterCharacterSet())
if (existingTextHasDecimalSeperator != nil && replacementTextHasDecimalSeparator != nil) || alphabeticString != nil {
return false
}
else {
return true
}
}
语句分为两个条件:
@Html.Commentbox(m => m.Message);
答案 1 :(得分:1)
我更喜欢使用谓词。他们让生活更轻松! 在您的情况下,代码将是下一个:
func textField(textField: UITextField, shouldChangeCharactersInRange range: NSRange, replacementString string: String) -> Bool {
guard (textField.text != nil) && (string != "") else { return true }
let predicate = NSPredicate(format: "SELF MATCHES %@", "[0-9]{1,}+\\.{0,1}[0-9]{0,}")
let resultString = (textField.text! as NSString).stringByReplacingCharactersInRange(range, withString: string)
return predicate.evaluateWithObject(resultString)
}
只需4行。
祝你好运!