텍스트 필드 ( Text Field )

 

텍스트 필드 사용법

textField.keyboardType = UIKeyboardType.emailAddress // 텍스트필드의 키보드 스타일
textField.placeholder = "이메일 입력"
textField.borderStyle = .roundedRect // 텍스트필드의 선 스타일
textField.clearButtonMode = .always // 텍스트삭제 버튼
textField.returnKeyType = .go // 엔터의 형태 설정

 

텍스트 필드 선택 함수 정리

// 텍스트필드의 입력을 시작할때 호출 되는 메서드 ( 시작할지 말지 여부 허락 하는 것 )
    func textFieldShouldBeginEditing(_ textField: UITextField) -> Bool {
        return true
    }
    
    // 시점 -
    func textFieldDidBeginEditing(_ textField: UITextField) {
        print(#function)
        print("유저가 텍스트필드의 입력을 시작했다.")
    }
    
    func textFieldShouldClear(_ textField: UITextField) -> Bool {
        print(#function)
        return true
    }
    
    // 텍스트필드 글자 내용이 입력되거나 지워질때 호출됨 (허락)
    func textField(_ textField: UITextField, shouldChangeCharactersIn range: NSRange, replacementString string: String) -> Bool {
        print(#function)
        return true
    }
    
    
    // 텍스트필드의 엔터키가 눌러지면 다음 동작을 허락할 것인지 말것인지
    func textFieldShouldReturn(_ textField: UITextField) -> Bool {
        print(#function)
        return true
    }
    
    // 실제로 텍스트필드의 입력이 끝날때 호출 끝날지 말지를 허락
    func textFieldShouldEndEditing(_ textField: UITextField) -> Bool {
        print(#function)
        return true
    }
    
    // 텍스트필드의 입력이 실제 끝났을때 호출 (시점)
    func textFieldDidEndEditing(_ textField: UITextField) -> Bool {
        print(#function)
        return true
    }

 

화면 탭 시 종료 하는 함수

 override func touchesBegan(_ touches: Set<UITouch>, with event: UIEvent?) {
        self.view.endEditing(true)
        
    }

 

텍스트필드 글자 수 제한 하는 방법

func textField(_ textField: UITextField, shouldChangeCharactersIn range: NSRange, replacementString string: String) -> Bool {
        // 입력되고 있는 글자가 숫자인 경우 입력을 허용하지 않는 논리
        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
        }
    }

 

텍스트필드에서 입력 완료 후 return 누르면 다음 텍스트 필드로 이동 하는 방법

func textFieldShouldReturn(_ textField: UITextField) -> Bool {
        if firstTextField.text != "", secondTextField.text != "" {
            firstTextField.resignFirstResponder()
            // .resignFirstResponder() 첫번째 응답 자격을 해지 시키겠다라는 명령어
            return true
        } else if secondTextField.text != "" {
            secondTextField.becomeFirstResponder()
            return true
        }
        return false
    }
    
    override func touchesBegan(_ touches: Set<UITouch>, with event: UIEvent?) {
        firstTextField.resignFirstResponder()
        secondTextField.resignFirstResponder()
    }