TextField Delegate - 1[Beginning Level]

Bettor·2023년 1월 5일
0

TextField

목록 보기
1/1

기초편으로 UI와 간단한 기능을 구현해보자.

  1. StoryBoard

— UI

func setup() {
        view.backgroundColor = UIColor.gray
        textField.keyboardType = UIKeyboardType.emailAddress
        textField.placeholder = "이메일 입력"
        textField.borderStyle = .roundedRect
        textField.clearButtonMode = .always
        textField.returnKeyType = .next // 노션에 정리해보기 이딴건 외우는거 아니다!!
        
        textField.becomeFirstResponder() // first응답객체(화면에서 일단 먼저 반응)를 지정해주는데, 텍스트필드가 first응답객체가되면 키보드가 올라온다.

— Function

// 화면의 탭을 감지하는 메서드, 화면을 터치하면 키보드가 내려감
    override func touchesBegan(_ touches: Set<UITouch>, with event: UIEvent?) {
        self.view.endEditing(true)
    }
// 텍스트필드의 입력을 시작할때 호출(시작할지 말지의 여부를 허락하는 것)
    func textFieldShouldBeginEditing(_ textField: UITextField) -> Bool {
        print(#function) // 테스트용으로 터미널에 로그가 찍힘 어떤 함수가 발동됬는지
        return true
    }
// 시점 -
    func textFieldDidBeginEditing(_ textField: UITextField) {
        print(#function)
        print("유저가 텍스트필드의 입력을 시작했다.")
    }
// clear버튼을 누르면 할지 clear할지 말지
    func textFieldShouldClear(_ textField: UITextField) -> Bool {
        print(#function)
        return true
    }
// 텍스트필드 글자 내용이 (한글자 한글자) 입력되거나 지워질때 호출이 되고, 입력을 가능하게 할지 불가능하게 할지
    func textField(_ textField: UITextField, shouldChangeCharactersIn range: NSRange, replacementString string: String) -> Bool {

        print(string) // 입력하면 터미널에 찍히고 지우면 지워짐
        
        // 입력되고 있는 글자가 "숫자"인 경우 입력을 허용하지 않는 논리
        if Int(string) != nil { // 숫자로 변환이 된다면 nil이 아니므로
            return false
        } else {
            // 10글자 이상 입력되는 것을 막는 코드
            guard let text = textField.text else { return true }
            let newLength = text.count + string.count - range.length
            return newLength <= 10
        }
    }
// 텍스트필드의 엔터키가 눌려지면 다음동작을 허락할것인지 말것인지
    func textFieldShouldReturn(_ textField: UITextField) -> Bool {
           print(#function)
        
        if textField.text == "" {
            textField.placeholder = "Type Something!"
            return false
        } else {
            return true
        }
    }
// 텍스트필드의 입력이 끝날때 끝내는걸 허락할지 말지
    func textFieldShouldEndEditing(_ textField: UITextField) -> Bool {
        print(#function)
        return true
    }
// 텍스트필드의 입력이 끝났을 시점
    func textFieldDidEndEditing(_ textField: UITextField) {
        print(#function)
        print("유저가 텍스트필드의 입력을 끝냈다")
    }
@IBAction func doneButtonTapped(_ sender: UIButton) {
        textField.resignFirstResponder() // becomeFirstResponder의 반대, 키보드가 내려감.
    }
  • 정리해야 될 것
        let maxLength = 10 // 10글자만 입력가능하게 하기.
            let currentString: NSString = (textField.text ?? "") as NSString
            let newString: NSString =  currentString.replacingCharacters(in: range, with: string) as NSString

            return newString.length <= maxLength // 1번째 방법
        if (textField.text?.count)! + string.count > 10 {
            return false
        } else {
            return true
        } // 2번째 방법

0개의 댓글