gpt4 book ai didi

iOS Delegate 以防止无效输入

转载 作者:行者123 更新时间:2023-11-28 12:46:37 25 4
gpt4 key购买 nike

我正在学习 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
}
}

最佳答案

嗯,我不确定为什么它不起作用。为什么不为您的 textfield 使用“Decimal Pad”键盘类型?

如果出于某种原因你不想这样做,试试这个:

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
}
}

关于iOS Delegate 以防止无效输入,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37870049/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com