2017-01-20 37 views
0

我有這個條件的文本框,在這裏 -斯威夫特:無法在文本框與基於狀態字的限制刪除字符

  1. 如果在國家的下拉列表中,我選擇BE,然後以同樣形式的文本框應該只允許4個字符
  2. 如果不是BE,那麼文本字段只允許有12個字符。

    func textField(textField: UITextField, shouldChangeCharactersInRange range: NSRange, replacementString string: String) -> Bool 
    

    問題 -

我這個使用來實現:

以上實施工作不錯,但 -

  1. 我選擇不是被其他的國家(即文本字段中允許有12個字符)並保存數據。
  2. 重新打開表格並選擇「是」。現在我根本無法編輯文本字段。

我該如何解決這個問題?

這裏是我完整的代碼 -

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

一般情況下,是的,它的功能是否正常的一個例子......但是當我嘗試的場景「的問題」解釋部分,退格不起作用 –

回答

0

簡單的解決方案是,只要你選擇一個國家只保存以前的文本轉換成另一個字符串,如果有必要存儲以前的記錄,只需清除textField每次從drop中選擇一個國家向下選擇方法。 因爲您選擇的不是BE,所以它將範圍擴展到12,並且您在textField中輸入了4個以上的字符,並且當您將國家更改回BE時,textField已經具有比BE範圍更多的數據,因此它不允許你改變文字。

以下僅僅是示範

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

}