반응형
안녕하세요. KataRN입니다.
오늘은 특정 UIControl에 addTarget으로 이벤트를 부여하는 것을 해보도록 하겠습니다.
사실 오늘은 너무너무너무 정리가 잘되어있는 글이 있어서 이론적인 내용보다는 예시를 통한 예로 간단하게 설명해보겠습니다.
참고 글 : https://daheenallwhite.github.io/ios/2019/07/24/Target-Action/
아래 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)
}
}
반응형
'Old_SWIFT(221012) > 기본이야기' 카테고리의 다른 글
애니메이션(UIView Animation, CGAffineTransform) 만들기 (0) | 2022.03.19 |
---|---|
타이머(DispatchSourceTimer), 시간측정 다루기 (0) | 2022.03.18 |
제스처(addGestureRecognizer, UITapGestureRecognizer) 알아보기 (0) | 2022.03.17 |
[AutoLayout]UILabel, Hugging Priority, Compression Resistance Priority, Intrinsic Content Size (0) | 2022.02.23 |
TableView 알아보기(UITableViewDatasource, UITableViewDelegate) (0) | 2022.02.02 |