2016-12-26 1 views
0

사용자의 성 및 이름과 같은 일부 textField가 포함 된 설정보기가 있습니다. 사용자가 글자 이외의 다른 글에 입력 할 수 없도록하고 싶습니다. 몇 가지 연구 후 나는 이것을 달성하기위한 가장 좋은 방법은 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

입니다.이 기능을 사용할 필요는 없습니다.

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 
     } 
    } 
} 
:

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

그런 다음 호출되는 함수를 만듭니다 : 그냥 텍스트 필드가 변경 될 때마다 실행하는 대상을 만들

관련 문제