본문 바로가기
iOS/iOS

[iOS] Date Picker - 날짜 선택

by 원만사 2021. 12. 14.
반응형

 UIDatePicker를 사용하여 날짜를 선택하는 방법을 알아보자. 먼저 아래 사진과 같이 빈 화면에 하나의 텍스트 필드를 만들었다. 이제 저 텍스트 필드를 선택했을 때 날짜를 선택할 수 있는 창이 뜨도록 구현해보자.

 

 먼저 뷰 컨트롤러에 텍스트 필드와 연결된 outlet 변수를 만들었고 UIDatePicker 객체의 인스턴스에 해당하는 프로퍼티와 datePicker에서 선택한 날짜를 담아줄 Date형 프로퍼티를 만들었다.

import UIKit

class ViewController: UIViewController {
    @IBOutlet weak var dateTextField: UITextField!
    
    private let datePicker = UIDatePicker()
    private var date: Date? // datePicker에서 선택한 date를 저장하는 프로퍼티
    
    override func viewDidLoad() {
        super.viewDidLoad()
    }

}

 

 datePicker를 설정하기에 앞서 사용할 프로퍼티는 다음과 같다.

  • datePickerMode : Date Picker의 모드를 설정한다. .time, .date, .dateAndTime, .countDownTimer등이 있다.
  • preferredDatePickerStyle : Date Picker의 스타일을 설정한다.
  • locale : Date Picker의 locale 설정
  • addTarget(_: action: for:) : 컨트롤에 타겟이 되는 객체와 action 메서드를 연결한다.
    • target : 작업 메서드가 호출되는 객체이다. 
    • action : 호출할 작업 메서드. action 파라미터는 nil이 될 수 없다.
    • controlEvents : 지정된 이벤트에 따라서 action 메서드가 호출된다.

 

 작성된 코드는 다음과 같다.

import UIKit

class ViewController: UIViewController {
    ...
    
    private func configureDatePicker() {
    	
        // datePicker의 모드로 .date 설정
        self.datePicker.datePickerMode = .date
        
        // datePicker의 style을 wheels로 설정
        self.datePicker.preferredDatePickerStyle = .wheels
        
        // 값이 바뀔때마다 datePickerValueDidChange 호출
        self.datePicker.addTarget(self, action: #selector(datePickerValueDidChange(_:)), for: .valueChanged)
        
        // locale을 한국으로 설정한다. 
        self.datePicker.locale = Locale(identifier: "ko_KR")
        
        // dateTextField를 선택했을 때 키보드가 아닌 날짜 선택 창이 뜨도록
        self.dateTextField.inputView = self.datePicker
        
    }
    
    // datePicker.addTarget의 selector에 지정된 메서드
    @objc private func datePickerValueDidChange(_ datePicker: UIDatePicker) {
        let formatter = DateFormatter() // Date 타입과 관련된 포맷터
        formatter.dateFormat = "yyyy년 MM월 dd일(EEEEE)" // 요일을 한글자만
        formatter.locale = Locale(identifier: "ko_KR")
        self.date = datePicker.date
        self.dateTextField.text = formatter.string(from: datePicker.date)
    }

}

 

반응형

댓글