Post

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
    }
}

결과

image

Reference

This post is licensed under CC BY 4.0 by the author.