Ios 阻止用户输入文本
我在看这本书 IOS编程:大书呆子牧场指南 我正在创建一个将华氏温度转换为摄氏温度的简单应用程序,最后一个挑战是防止用户键入字母字符,这是我的尝试Ios 阻止用户输入文本,ios,swift,nscharacterset,Ios,Swift,Nscharacterset,我在看这本书 IOS编程:大书呆子牧场指南 我正在创建一个将华氏温度转换为摄氏温度的简单应用程序,最后一个挑战是防止用户键入字母字符,这是我的尝试 func textField(_ textField: UITextField, shouldChangeCharactersIn range: NSRange, replacementString string: String) -> Bool {
func textField(_ textField: UITextField,
shouldChangeCharactersIn range: NSRange,
replacementString string: String) -> Bool {
let allowedCharacters = CharacterSet.decimalDigits
let characterSet = CharacterSet(charactersIn: string)
return allowedCharacters.isSuperset(of: characterSet)
let existingTextHasDecimalSeparator = textField.text?.range(of: ".")
let replacementTextHasDecimalSeparator = string.range(of: ".")
if existingTextHasDecimalSeparator != nil,
replacementTextHasDecimalSeparator != nil{
return false
}else{
return true
}
}
它可以工作,但我得到一个警告说“返回后的代码将永远不会执行”,有更好的方法来防止这个警告吗?提前谢谢你 错误消息是: 返回后的代码将永远不会执行 这基本上意味着无论何时添加
return
语句,都不会执行该语句后面的代码
警告来自此行:
return allowedCharacters.isSuperset(of: characterSet)
我认为您不需要下面的代码,因为在该函数中,我打赌您只想返回允许的字符,否则返回false。警告
'返回后的代码将永远不会执行
编译器已经对您的代码进行了分析,并告诉您下面的任何内容都返回allowedCharacters.isSuperset(of:characterSet)
将永远不会执行
正如您所说:它可以工作,但我收到一条警告,上面说“返回后的代码将永远不会执行”。有更好的方法来防止此警告吗?
Ans:要删除此警告,只需删除此语句下方的整个代码返回allowedCharacters。IssupSet(of:characterSet)
,警告将被删除
如果您正在寻找更好的方法,我会推荐下面的方法,有比这更好的方法,但我不知道
顺便说一句
实现功能,即防止用户输入文本。您只需更改键盘类型
textField.keyboardType = .decimalPad // this only works in iPhone not in iPad
由于更改键盘类型仅在iPhone
中有效,而在iPad
中无效,因此最好实现textfield
中允许的字符,在textfield
中,委托方法应更改中的字符,如下所示:
func textField(_ textField: UITextField, shouldChangeCharactersIn range: NSRange, replacementString string: String) -> Bool {
let inverseSet = NSCharacterSet(charactersIn:".0123456789").inverted // characters you want to allow in textfield
let components = string.components(separatedBy: inverseSet)
let filtered = components.joined(separator: "")
return string == filtered
}
是:不要将代码放在return
语句之后。你有没有试过输入1.5,看看它是否真的有效?这对你通过书本学习iOS很好。为了获得更好的知识,如果你更喜欢Apple doc的bcz,那就更好了。最重要的是,你第一次在Apple doc上看到的新东西改变了IOS,而不是其他任何网站和书籍。我支持Rashwan的回答。另外值得注意的是,您可以将文本字段的键盘类型更改为仅显示数字键盘或十进制键盘。:)@如果发生以下情况,KimArnett更改键盘类型将不起作用iPad@Maddy是的,感谢您的澄清。此答案中的代码仍然存在问题,因为它仍然允许用户输入字符串,如1.2.3.4.5
。是@rmaddy这就是问题所在,每个人都说我应该删除return语句下面的部分,但这部分也很有用。我的问题是如何保留这两个警告并删除它们。