목차

iOS 텍스트필드와 델리게이트 패턴

텍스트필드는 입력에 관한 세심한 관리가 필요하다. 동작에 따른 뷰컨트롤러와의 상호작용을 위해 델리게이트 패턴을 사용한다.

  • 유저가 입력을 시작할때(활성화 할것인지)
  • 유저 입력 시작되고나서
  • 입력내용 전체삭제 할지 말지
  • 키보드의 엔터키가 눌렸을때 (다음 동작을 허락할지)
  • 입력이 끝났을때
import UIKit
//UITextFieldDelegate 추가
class ViewController: UIViewController, UITextFieldDelegate {

    let textField = UITextField()

    override func viewDidLoad() {
        super.viewDidLoad()

        // 텍스트 필드 설정
        textField.frame = CGRect(x: 50, y: 100, width: 300, height: 40)
        textField.borderStyle = .roundedRect
        textField.placeholder = "Enter your name"
        textField.keyboardType = .default
        textField.returnKeyType = .done

        // 델리게이트 설정 self -> ViewController
        textField.delegate = self

        view.addSubview(textField)
    }

    // MARK: UITextFieldDelegate 메서드

    // 1. 텍스트 필드 입력 제한 (최대 10글자)
    func textField(_ textField: UITextField, shouldChangeCharactersIn range: NSRange, replacementString string: String) -> Bool {
        let currentText = textField.text ?? ""
        let newText = (currentText as NSString).replacingCharacters(in: range, with: string)

        return newText.count <= 10 // 최대 10글자까지만 허용
    }

    // 2. 리턴 키 동작
    func textFieldShouldReturn(_ textField: UITextField) -> Bool {
        textField.resignFirstResponder() // 키보드 내림
        print("User entered: \(textField.text ?? "")")
        return true
    }

    // 3. 편집 시작 시
    func textFieldDidBeginEditing(_ textField: UITextField) {
        print("Editing started")
    }

    // 4. 편집 종료 시
    func textFieldDidEndEditing(_ textField: UITextField) {
        print("Editing ended")
    }
}