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)
        }