Swift:无法在基于条件的字符限制的文本字段中删除字符
Posted
技术标签:
【中文标题】Swift:无法在基于条件的字符限制的文本字段中删除字符【英文标题】:Swift: Can not delete characters in textField with condition based character restriction 【发布时间】:2017-01-20 11:13:56 【问题描述】:我对一个文本字段有这个条件,其中 -
-
如果在国家/地区的下拉列表中选择 BE,则相同形式的文本字段应仅允许 4 个字符
如果不是 BE,则文本字段仅允许 12 个字符。
我使用 -
实现了这个func textField(textField: UITextField, shouldChangeCharactersInRange range: NSRange, replacementString string: String) -> Bool
问题:
上述实现运行良好,但是 -
-
我选择 BE 以外的国家(即文本字段中允许 12 个字符)并保存数据。
重新打开表单并选择“BE”。现在我根本无法编辑文本字段。
我该如何解决这个问题?
这是我的完整代码 -
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
【问题讨论】:
退格在文本字段编辑上是否有效 一般来说,是的,它工作正常......但是当我尝试“问题”部分中解释的场景时,退格不起作用 【参考方案1】:简单的解决方案是,每当您选择一个国家/地区时,只需将先前的文本保存到另一个字符串中,如果需要存储先前的记录,否则只需在每次从下拉选择方法中选择一个国家/地区时清除 textField
。
因为您选择的不是 BE,所以它会将范围扩展到 12,并且您在 textField
中输入了超过 4 个字符,并且当您将国家/地区更改回 BE 时,textField
的数据已经超过了 BE 的范围,所以它不会'不允许你更改文本。
以下仅为演示示例
func didSelectCountryFromDropDown()
self.textField.text = ""
【讨论】:
以上是关于Swift:无法在基于条件的字符限制的文本字段中删除字符的主要内容,如果未能解决你的问题,请参考以下文章