Swift:无法删除textField中基于条件的字符限制的字符

时间:2017-01-20 11:13:57

标签: ios swift uitextfield

我对textField有这个条件,其中 -

  1. 如果在国家/地区的下拉列表中,我选择BE,那么同一表单中的文本字段应仅允许4个字符
  2. 如果不是BE,那么文本字段只允许12个字符。
  3. 我使用 -

    实现了这个
    func textField(textField: UITextField, shouldChangeCharactersInRange range: NSRange, replacementString string: String) -> Bool
    

    问题:

    上述实施工作正常,但是 -

    1. 我选择BE以外的国家/地区(即文本字段中允许的12个字符)并保存数据。
    2. 重新打开表单并选择" BE"。现在我根本无法编辑文本字段。
    3. 如何解决这个问题?

      这是我的完整代码 -

      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 个答案:

答案 0 :(得分:0)

简单的解决方案是,无论何时选择国家/地区,只需将之前的文本保存到另一个字符串中,如果有必要存储先前的记录,则只需在每次从dropDown选择方法中选择国家/地区时清除textField。 因为您选择的不是BE,所以它将范围扩展到12,并且您在textField中输入了超过4个字符,当您将国家/地区更改回BE时,textField已经拥有超过范围的数据因此,它不允许您更改文本。

以下只是演示示例

func didSelectCountryFromDropDown() {
    self.textField.text = ""

}