기초편으로 UI와 간단한 기능을 구현해보자.
— 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번째 방법