[iOS][Swift] TextField, TextView 길이 제한하기 (maxLength)
2017. 10. 6. 18:23ㆍiOS
반응형
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를 걸어보았다.
입력
출력
코드에 사용된 변수만 살펴보자면
- 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
지정 가능
반응형