iOS/project
[iOS] 인스타그램 클론 코딩을 해보자!(2) - 회원가입 액션 연결
year.number
2022. 10. 3. 12:45
✅ 오늘의 목표
회원가입 화면에서 textfield에 텍스트를 입력하면 콘솔창에 각각 입력된 값을 띄워주기
1️⃣ 유효성 검사
textfield에서 유효한 값이 입력되는 경우 true로 값 변경해주는 코드 작성하기
import UIKit
class RegisterViewController: UIViewController {
// MARK: - Properties
// 유효성 검사
// textfield에서 유효한 값이 입력되는 경우 true로 값 변경
var isValidEmail = false
var isValidName = false
var isValidNickname = false
var isValidPassword = false
2️⃣ textField 연결
// Textfields
@IBOutlet weak var emailTextfield: UITextField!
@IBOutlet weak var nameTextfield: UITextField!
@IBOutlet weak var nicknameTextfield: UITextField!
@IBOutlet weak var passwordTextfield: UITextField!
3️⃣ Action을 코드로 작성
IBAction으로 구현했던 것을 코드로 작성하기 위해서는 @objc 가 필요하다!
@objc는 objective-c 코드를 swift 파일내에서 사용해야 할 때 사용하는 코드이다
// MARK: - Actions
// action을 코드로 작성
@objc
func textFieldEditingChanged(_ sender: UITextField) {
let text = sender.text ?? "" // 옵셔널 벗겨주기
switch sender {
case emailTextfield:
print("email")
case nameTextfield:
print("name")
case nicknameTextfield:
print("nickname")
case passwordTextfield:
print("password")
default:
fatalError("Missing TextField... :(")
}
}
4️⃣ TextField와 Action을 연결해주는 코드
// MARK: = Helpers
// textField와 action 연결
private func setupTextField() {
emailTextfield.addTarget(self, action: #selector(textFieldEditingChanged(_:)), for: .editingChanged)
nameTextfield.addTarget(self, action: #selector(textFieldEditingChanged(_:)), for: .editingChanged)
nicknameTextfield.addTarget(self, action: #selector(textFieldEditingChanged(_:)), for: .editingChanged)
passwordTextfield.addTarget(self, action: #selector(textFieldEditingChanged(_:)), for: .editingChanged)
}
📌 Tip
2️⃣, 4️⃣ 번을 조금 더 간단하게 작성할 수 있는 방법이 있다.
(1) 2️⃣ 에서 배열을 선언해주고
var textFields: [UITextField] {
[emailTextfield, nameTextfield, nicknameTextfield, passwordTextfield]
}
(2) 4️⃣ 에서 foreach를 이용해서 코드를 작성해준다
// 📌 forEach: 위의 긴 코드들을 한 번에 쓸 수 있는 코드
// 식별된 데이터의 콜렉션으로부터 요구에 따라 뷰를 계산해주는 구조체
textFields.forEach{tf in
tf.addTarget(self,
action: #selector(textFieldEditingChanged(_:)),
for: .editingChanged)
}