2016-10-24 4 views
0

텍스트 필드에 입력 할 수있는 문자를 제한하고 싶습니다. 예를 들어 1-5 숫자 (1,2, 3, 5) 사용자가 5보다 큰 숫자를 입력하면 textField가 아무 것도하지 않기를 바란다.Swift에서 uitextfield에 입력 할 수있는 문자 제한

길이를 제한하는 방법을 보았지만 위에 설명 된대로 특정 문자를 제한하는 데는 아무 것도 찾을 수 없습니다.

editingQtyFieldChanged을 사용해 보았지만 내가 원하는 것을하지 않았습니다.

myField.addTarget(self, action: #selector(UserInputViewController.fieldChanged), forControlEvents: UIControlEvents.EditingChanged) 

func fieldChanged(){ 
    let number = Int(myField.text!) 

    if number < 2{ 
     print("Number not allowed") 
    } 
} 

스위프트의 uitext 필드에서 1-5의 숫자로만 제한 하시겠습니까?

편집 : 여기 내 솔루션 덕분에 this 스레드 덕분입니다.

func textField(textField: UITextField, shouldChangeCharactersInRange range: NSRange, replacementString string: String) -> Bool { 
     let numbers = ["6","7","8", "9"] 
     for number in numbers{ 
      if string == number{ 
       return false 
      } 
     } 
    } 
+0

'editingQtyFieldChanged'란 무엇입니까? 그러한 사건은 문서화되어 있지 않습니다 (적어도 Swift 3의 경우). – rmaddy

+0

나쁘다, 나는 틀린 방법을 타이프했다. –

답변

1

textFieldDidEndEditing 대리인의 경우 텍스트를 구문 분석하고 숫자로 변환하십시오. 숫자가 범위 내에 있지 않으면 텍스트를 이전 값으로 설정하거나 적절한 조치를 취하십시오.

+0

재생 해 주셔서 감사합니다. –

4

나는 문자열 확장

extension String { 

    var containsValidCharacter: Bool { 
     let characterSet = CharacterSet(charactersIn: "12345") 
     let range = (self as NSString).rangeOfCharacter(from: characterSet) 
     return range.location != NSNotFound 
    } 
} 

다음 shouldChangeCharactersIn 방법으로이 작업을 수행.

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

    return !string.containsValidCharacter 
} 
+0

제안 해 주셔서 감사합니다. –

+0

좋은 해결책은 돌아 오기 전에'!'를 뒤집을 이유가 없으며'shouldChangeCharactersInRage' 함수가 백 스페이스를 막는 것입니다. 이 문제를 해결하기 위해'return string.containsValidCharacter' 전에'guard string! = ""else {return true} "를 삽입해야했습니다. – RWIL

관련 문제