[iOS][Swift] TextField, TextView 길이 제한하기 (maxLength)

2017. 10. 6. 18:23iOS

반응형
[iOS][Swift] TextField, TextView 길이 제한하기 (maxLength)

UITextField 제한

TextField에 길이를 제한하고 싶은 경우 UITextFieldDelegate 를 상속받아 함수 내에서 제한하면 된다.

아래 코드는 21만큼 제한시키기 위해서!
20글자 제한하려고 했는데 한글은 마지막 글자 받침이 입력되지 않길래 그냥 21글자로..
원하는 maxLength만큼 제한시키면 된다.

코드

1.class ViewContoller: UIViewController, UITextFieldDelegate {
2. func textField(_ textField: UITextField, shouldChangeCharactersIn range: NSRange, replacementString string: String) -> Bool {
3. guard let text = textField.text else { return true }
4. let newLength = text.characters.count + string.characters.count - range.length
5. return newLength <= 21
6. }
7.}

함수내 변수가 정확히 무엇을 의미하는지 궁금해서 breakpoint를 걸어보았다.

입력

스크린샷 2017-10-06 오후 4.15.52

출력

스크린샷 2017-10-06 오후 4.14.53

코드에 사용된 변수만 살펴보자면

  • text: 기존 textField에 있던 text
  • string: 새로 입력된 text
  • range.location: 현재 위치하는 곳
  • range.length: 지워질 글자 개수

UITextView 제한

마찬가지로, TextView에 길이를 제한하고 싶은 경우 UITextViewDelegate 를 상속받아 함수 내에서 제한하면 된다.

대신 얘는 200글자가 제대로 제한된다… 받침 입력잘됨..

코드

1.class ViewContoller: UIViewController, UITextViewDelegate {
2.
3. func textView(_ textView: UITextView, shouldChangeTextIn range: NSRange, replacementText text: String) -> Bool {
4. guard let str = textView.text else { return true }
5. let newLength = str.characters.count + text.characters.count - range.length
6. return newLength <= 200
7. }
8.}

UITextView와 UITextField의 차이

둘다 text 입력이 가능하다는 것은 같지만, 간단하게

UITextView

  • 여러줄 입력이 가능
  • 테두리(Board Style) 코드로만 지정 가능
  • placehorder 지정 불가

UITextField

  • 여러줄 입력이 불가능
  • 테두리(Board Style) StoryBoard상에서 지원
  • placehorder 지정 가능
반응형