Jiwift

[iOS/Swift] UITextField 글자수 제한, 글자수 세기 본문

iOS Dev/UIKit

[iOS/Swift] UITextField 글자수 제한, 글자수 세기

지위프트 2023. 12. 18. 22:40
반응형

 

UITextField의 글자수를 제한하고 개수를 표시하기 위한 로직 작성

 

 

20 자리를 기준으로 작성한 코드

self.nameTextField.delegate = self

글자수를 세기 위한 Textfield의 delegate를 설정

 

extension ViewController: UITextFieldDelegate {
    func textField(_ textField: UITextField, shouldChangeCharactersIn range: NSRange, replacementString string: String) -> Bool {
        
        // 기존 글씨 + 입력된 글씨 = text길이
        guard let text = textField.text else { return false }
        let newLength = text.utf16.count + string.utf16.count - range.length
        
        // 글자수 세기
        if newLength < 21 {
            self.nameCountLabel.text = "\(newLength)/20"
        }
        
        // backspace 허용
        if let char = string.cString(using: String.Encoding.utf8) {
            let isBackSpace = strcmp(char, "\\b")
            if isBackSpace == -92 {
                return true
            }
        }
        
        // 글자수 제한
        if newLength > 20 {
            return false
        }

        return true
    }
}

 

1. delegate를 위해서 UITextfieldDelegate 채택

2. shouldChangeCharactersIn 사용 

3. 글자수를 먼저 계산

4. 현재 20까지만 글자수를 업데이트

5. 백스페이스는 글자 제거를 위해서 예외처리

6. 글자수가 20을 넘어가면 false를 주어서 새로운 입력을 무시

반응형