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