您好,我的文本字段函数有以下代码,它只允许数字、点,并且总共不超过 7 个字符:
func textField(_ textField: UITextField, shouldChangeCharactersIn range: NSRange, replacementString string: String) -> Bool {
let length = ((textField.text?.characters.count)! + string.characters.count)
if (length > 7)
{
return false
}
else
{
// return true
let inverseSet = NSCharacterSet(charactersIn:".0123456789").inverted
let components = string.components(separatedBy: inverseSet)
let filtered = components.joined(separator: "")
return string == filtered && true
}
}
现在我在这个网站上发现了另一段很好的代码,它只允许一个小数字符:
func textField(_ textField: UITextField, shouldChangeCharactersIn range: NSRange, replacementString string: String) -> Bool {
if(string == "." ){
let countdots = textField.text!.components(separatedBy: ".").count - 1
if countdots > 0 && string == "."
{
return false
}
}
return true
}
我正在思考如何将这些东西组合成一个函数?不断出现错误..也许有人可以提出建议?
最佳答案
可以使用基本控制流(else if)将它们组合起来。
顺便说一句,return string == Filtered && true
行写得不好。如果 string == 已过滤,则返回 true;如果 string != 已过滤,则返回 false。因此,&& 子句是一个无用的补充。将其重写为返回字符串==过滤
。
考虑到这一点,以下是清理后的函数:
func textField(_ textField: UITextField, shouldChangeCharactersIn range: NSRange, replacementString string: String) -> Bool {
let length = ((textField.text?.characters.count)! + string.characters.count)
if (length > 7) {
return false
}
else if(string == "." ) {
let countdots = textField.text!.components(separatedBy: ".").count - 1
if countdots > 0 && string == "." {
return false
}
return true
}
else
{
// return true if the string is equivalent after removing all non-numbers (and therefore consisted of only numbers)
let inverseSet = NSCharacterSet(charactersIn:".0123456789").inverted
let components = string.components(separatedBy: inverseSet)
let filtered = components.joined(separator: "")
return string == filtered
}
}
关于ios - Swift 文本字段结合了两个功能,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42193665/