Old_SWIFT(221012)/기본이야기

UIControl 객체에 addTarget으로 이벤트 다루기

KataRN 2022. 3. 18. 00:44
반응형

안녕하세요. KataRN입니다.

 

오늘은 특정 UIControl에 addTarget으로 이벤트를 부여하는 것을 해보도록 하겠습니다.

 

 

사실 오늘은 너무너무너무 정리가 잘되어있는 글이 있어서 이론적인 내용보다는 예시를 통한 예로 간단하게 설명해보겠습니다.

참고 글 : https://daheenallwhite.github.io/ios/2019/07/24/Target-Action/

 

[iOS] Target-Action : UIControl 객체가 이벤트에 응답하는 방식

Dana Daheen Lee<br>#iOS #Swift #CleanCode #Programming

daheenallwhite.github.io

 

아래 2가지를 해보겠습니다.

  • 텍스트필드
  • 데이트피커

1. 텍스트 필드

텍스트 필드의 값을 변경하면 UILabel 내용이 변경되도록 해보겠습니다.

textField.addTarget(self, action: #selector(changeText(_:)), for: .editingChanged)

@objc private func changeText(_ textField: UITextField) {
    label1.text = textField.text
}

 

2. 데이트피커

데이트피커를 수정하면 텍스트 필드의 값이 변경되도록 해보겠습니다.

textFiled2.addTarget(self, action: #selector(changeDate(_:)), for: .editingChanged)

@objc private func changeDate(_ datePicker: UIDatePicker) {
    let formmater = DateFormatter()
    formmater.dateFormat = "yyyy년 MM월 dd일(EEEEE)"
    formmater.locale = Locale(identifier: "ko_KR")
    self.diaryDate = datePicker.date
    self.textFiled2.text = formmater.string(from: datePicker.date)
}

 

addTarget의 첫번째 파라미터는 적용할곳, 2번째 파라미터는 이벤트를 받았을 때 실행할 함수, 3번째 파라미터는 이벤트입니다.

실행 결과 한번에 보여드릴게요.

 

 

 

사진이라 표현이 안됐네요...

1. 텍스트필드에 값을 입력하면 왼쪽 텍스트가 변경됩니다.

2. 달력에서 날짜를 선택하면 텍스트 필드에 날짜가 입력되고 다시 선택하면 날짜가 변경됩니다.

 

ps. 데이트피커를 키보드처럼 넣기 위해 아래 코드를 사용했습니다.

self.textFiled2.inputView = self.datePicker

 

오늘도 읽어주셔서 감사합니다.

(전체 코드 첨부하겠습니다.)

 

import UIKit

class ViewController: UIViewController {
    
    @IBOutlet weak var label1: UILabel!
    @IBOutlet weak var textField: UITextField!
    @IBOutlet weak var textFiled2: UITextField!
    
    private let datePicker = UIDatePicker()
    private var diaryDate: Date?
    
    override func viewDidLoad() {
        super.viewDidLoad()
        configureDatePicker()
        
        textField.addTarget(self, action: #selector(changeText(_:)), for: .editingChanged)
        
        textFiled2.addTarget(self, action: #selector(changeDate(_:)), for: .editingChanged)
    }
    
    override func touchesBegan(_ touches: Set<UITouch>, with event: UIEvent?) {
        self.view.endEditing(true)
    }
    
    private func configureDatePicker() {
      self.datePicker.datePickerMode = .date
        self.datePicker.preferredDatePickerStyle = .wheels
      self.datePicker.addTarget(self, action: #selector(changeDate(_:)), for: .valueChanged)
      self.datePicker.locale = Locale(identifier: "ko-KR")
      self.textFiled2.inputView = self.datePicker
    }
    
    @objc private func changeText(_ textField: UITextField) {
        label1.text = textField.text
    }

    @objc private func changeDate(_ datePicker: UIDatePicker) {
      let formmater = DateFormatter()
      formmater.dateFormat = "yyyy년 MM월 dd일(EEEEE)"
      formmater.locale = Locale(identifier: "ko_KR")
      self.diaryDate = datePicker.date
      self.textFiled2.text = formmater.string(from: datePicker.date)
    }
}

 

 

반응형