2017-10-31 5 views
-1

나는 그 화면에 OTP 스크린을 만들고있다. 나는 6 개의 텍스트 fields.Now를 추가했다. 하나의 charecter만을 입력하기를 원한다. & 또한 특별한 charecters를 입력하지 못하도록 제한하고 싶다. 코드 &을 검토하여 무엇이 잘못되었는지 알려주십시오.제한 문자로 제한하고 특수 charecters를 신속하게 제한 하시겠습니까?

let notAllowedCharacters = "[email protected]#$%^&*()_+{},./[]?:;"; 

func textField(_ textField: UITextField, shouldChangeCharactersIn range: NSRange,replacementString string: String) -> Bool 
    { 
     guard let text = textField.text else { return true } 
     let newLength = text.characters.count + string.characters.count - range.length 
     if newLength <= 1 { 

      return true 
     } 
     else { 
      let set = NSCharacterSet(charactersIn: notAllowedCharacters); 
      let filtered = string.components(separatedBy: set as CharacterSet).joined(separator: "") 
      return filtered == string; 
     } 
    } 

답변

0

문자 길이를 확인할 때 NSCharacterSet의 컨트롤을 추가해야합니다. 그렇지 않은 경우 항상 문자 하나가 있으면 항상 문자와 상관없이 참입니다. 코드를 업데이트하면 다음과 같이 작동합니다.

func textField(_ textField: UITextField, shouldChangeCharactersIn range: NSRange,replacementString string: String) -> Bool { 
    guard let text = textField.text else { return true } 
    let newLength = text.characters.count + string.characters.count - range.length 

    let set = NSCharacterSet(charactersIn: notAllowedCharacters) 
    if newLength <= 1 && !(string.rangeOfCharacter(from: set as CharacterSet) != nil) { 
     return true 
    } else { 
     return false 
    } 
}