2016-12-26 32 views
0

我有一個設置視圖,其中包含一些textFields,如用戶的名字和姓氏。我想確保用戶不能輸入除字母之外的其他任何內容。經過一番研究,我發現實現這一點的最佳方法是使用textFieldShouldReplaceCharactersInRange委託方法。代碼我似乎工作只允許他們輸入字母,但它不會讓我退格。我已經閱讀了該方法的蘋果文檔,但我很難把握它。如果可以用更加愉快的友好方式來解釋這一點,那將是非常好的,並解釋爲什麼退出不被允許會很好,所以我可以真正理解。我的代碼如下不能退格後執行textFieldShouldReplaceCharactersInRange

func textField(_ textField: UITextField, shouldChangeCharactersIn range: NSRange, replacementString string: String) -> Bool { 

    if textField == firstNameTextField { 

     let allowedCharacter = NSCharacterSet.letters 
     let replacementTextHasRightCharacters = string.rangeOfCharacter(from: allowedCharacter as CharacterSet) 

     if replacementTextHasRightCharacters == nil { 
      return false 
     } else { 
      return true 
     } 

    } 
    return true 
} 

回答

0

你並不需要使用該功能。只要創建一個目標運行每文本字段改變時間:

textField.addTarget(self, action: #selector(YourViewController.textFieldDidChange(_:)), forControlEvents: UIControlEvents.EditingChanged) 

然後創建一個被調用的函數:

func textFieldDidChange(textField: UITextField) { 
    let letters = CharacterSet.letters 

    for letter in textField.text!.unicodeScalars { 
     if letters.contains(letter) { 
      // is a letter 
     } else { 
      // not a letter 
     } 
    } 
}