我对textField有这个条件,其中 -
我使用 -
实现了这个func textField(textField: UITextField, shouldChangeCharactersInRange range: NSRange, replacementString string: String) -> Bool
问题:
上述实施工作正常,但是 -
如何解决这个问题?
这是我的完整代码 -
func textField(textField: UITextField, shouldChangeCharactersInRange range: NSRange, replacementString string: String) -> Bool {
var maxLength: Int?
let newText = NSString(string: textField.text!).stringByReplacingCharactersInRange(range, withString: string)
if ((textField.textInputMode?.primaryLanguage == "emoji") || (textField.textInputMode?.primaryLanguage == nil)){
return false
}
switch textField {
case postCodeText:
if (self.selectedCountryCode == "BE") {
maxLength = 4
}
else {
maxLength = 12
}
return newText.characters.count <= maxLength
case streetText:
maxLength = 40
return newText.characters.count <= maxLength
}
}
编辑1:添加了屏幕录制 recordit link demonstrating the problem
答案 0 :(得分:0)
简单的解决方案是,无论何时选择国家/地区,只需将之前的文本保存到另一个字符串中,如果有必要存储先前的记录,则只需在每次从dropDown选择方法中选择国家/地区时清除textField
。
因为您选择的不是BE,所以它将范围扩展到12,并且您在textField
中输入了超过4个字符,当您将国家/地区更改回BE时,textField
已经拥有超过范围的数据因此,它不允许您更改文本。
以下只是演示示例
func didSelectCountryFromDropDown() {
self.textField.text = ""
}