UIKit - UITextField 글자수 표시 및 제한하기
UIKit - UITextField 글자수 표시 및 제한하기
UITextField의 글자수를 표시 및 제한하는 기능은 UITextField Delegate 프로토콜 내에 있는 textField(_ textField:, shouldChangeCharactersIn:, replacementString:) 메서드를 통해 구현 가능함.
해당 메서드는 UITextField에 글자가 입력될 때마다 호출되며, Bool 타입을 반환값으로 가지고 있어 글자 입력 가능 여부를 결정할 수 있음.
TodoAddViewController.swift
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
import UIKit
final class TodoAddViewController: UIViewController {
// MARK: - 할일 추가 화면
let todoAddView = TodoAddView()
...
func setupTodoAddView(){
// TextField Delegate 설정
todoAddView.setTextFieldDelegate(delegate: self)
}
...
}
// MARK: - TextField Delegate
extension TodoAddViewController: UITextFieldDelegate{
...
// UITextField 글자가 입력될 때 호출
func textField(_ textField: UITextField, shouldChangeCharactersIn range: NSRange, replacementString string: String) -> Bool {
guard let text = textField.text else { return false }
// 문자 길이 계산
let length = text.utf16.count + string.utf16.count - range.length
// 글자수 표시
todoAddView.setTodoCount(count: length)
// 백스페이스는 예외처리
if let char = string.cString(using: .utf8){
let isBackspace = strcmp(char, "\\b")
if isBackspace == -92 {
return true
}
}
// 입력 가능 수보다 크면 입력 불가능하도록 false 반환
if length >= Constant.TODO_TITLE_MAX_LENGTH{
return false
}
// 그 외의 경우는 입력 가능
return true
}
}
결과
Reference
This post is licensed under CC BY 4.0 by the author.
