<결과>
<코드>
//
// ViewController.swift
// TextFieldProject
//
// Created by Allen H on 2021/11/25.
//
import UIKit
class ViewController: UIViewController, UITextFieldDelegate {
@IBOutlet weak var textField: UITextField!
override func viewDidLoad() {
super.viewDidLoad()
view.backgroundColor = UIColor.gray
textField.placeholder = "이메일 입력"
textField.borderStyle = UITextField.BorderStyle.roundedRect
textField.clearButtonMode = UITextField.ViewMode.always
textField.keyboardType = .emailAddress
textField.returnKeyType = .next
// 최초응답자 설정(responder) (뷰마다 특성이 조금 다름) (UIResponder)
// 전체화면이 터치를 입력받을 수 있는 상태 ==> 텍스트필드가 가장 먼저 입력받는 상태
// 키보드가 올라옴 (손가락 터치로 직접 최초응답자 설정도 가능)
textField.becomeFirstResponder()
//textField.resignFirstResponder()
// 텍스트필드의 대리자가 뷰컨트롤러가됨
// (텍스트필드에서 일어나는 일을 전달받음)
textField.delegate = self
}
@IBAction func doneButtonTapped(_ sender: UIButton) {
textField.resignFirstResponder()
//self.view.endEditing(true)
}
// 텍스트필드의 입력을 시작할때 호출 (시작할지 말지를 물어보는 것)
func textFieldShouldBeginEditing(_ textField: UITextField) -> Bool {
print(#function)
return true
}
// 텍스트필드의 입력이 시작되면 호출 (시점)
func textFieldDidBeginEditing(_ textField: UITextField) {
print(#function)
}
// 텍스트필드 내용을 삭제할 때 호출 (삭제할지 말지를 물어보는 것)
func textFieldShouldClear(_ textField: UITextField) -> Bool {
print(#function)
return true
}
// 텍스트필드에 글자내용이 (한글자 한글자) 입력되거나 지워질때 호출 (허용할지 말지를 물어보는 것)
func textField(_ textField: UITextField, shouldChangeCharactersIn range: NSRange, replacementString string: String) -> Bool {
print(#function)
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
}
// 10글자이상 입력되는 것을 막는 코드 (또다른 구현법)
if (textField.text?.count)! + string.count > 10 {
return false
} else {
return true
}
//return true
}
// 텍스트필드의 엔터키가 눌러졌을때 호출 (동작할지 말지 물어보는 것)
func textFieldShouldReturn(_ textField: UITextField) -> Bool {
print(#function)
return true
}
// 텍스트필드의 입력이 끝날때 호출 (끝낼지 말지를 물어보는 것)
func textFieldShouldEndEditing(_ textField: UITextField) -> Bool {
print(#function)
// 실제 텍스트필드에 아무것도 입력이 되어 있지 않으면, 입력을 끝내지 못하게
if textField.text == "" {
textField.placeholder = "Type Something!"
return false
} else {
return true
}
//return true
}
// 텍스트필드의 입력이 (실제) 끝났을때 호출 (시점)
func textFieldDidEndEditing(_ textField: UITextField) {
print(#function)
textField.text = ""
}
// 화면에 탭을 감지(UIResponder)하는 메서드
override func touchesBegan(_ touches: Set<UITouch>, with event: UIEvent?) {
textField.resignFirstResponder()
//self.view.endEditing(true)
}
}
<기억할것>
1. 텍스트필드 델리게이트 관련 함수를 쓸땐 꼭 ui텍스트필드델리게이트 프로토콜 채택하기, 델리게이트 권환 설정해주기
ViewController: UIViewController, UITextFieldDelegate
(뷰디드로드)
textField.delegate = self
2. 텍스트필드 델리게이트 관련 함수
//텍스트필드 입력 시작할지말지
textFieldShouldBeginEditing
//텍스트필드 입력이 시작된 시점
textFieldDidBeginEditing
//텍스트필드 내용을 삭제할지말지
textFieldShouldClear
//텍스트필드 내용이 한글자한글자 입력되거나 지워질때 허용할지말지
TextField(텍스트필드, 슈드체인지캐릭터스인..)
//텍스트필드 엔터키가 눌렸을때 동작할지말지
textFieldShouldReturn
//텍스트필드 입력이 끝났을때 끝낼지말지
textFieldShouldEndEditing
//텍스트필드 입력이 끝났을때 시점
textFieldDidEndEditing
<코드복습>
'iOS앱만들기' 카테고리의 다른 글
| 네이버지도API 활용하기 (0) | 2022.11.16 |
|---|---|
| 로그인화면/코드로UI짜기 (0) | 2022.11.07 |
| 텍스트필드 (델리게이트) 앱만들기 (참고하여) >> 개인정보 입력 앱 만들기 (2) | 2022.10.17 |
| 타이머앱 만들기(참고하여) >> 3초마다 알림울리는 앱 만들기 (0) | 2022.10.14 |
| 타이머앱 만들기 (3) | 2022.10.14 |
