[Do it!] 데이트 피커 앱

CoCoral·2023년 8월 19일
0

Do it!

목록 보기
4/25
post-thumbnail

Do it! 스위프트로 아이폰 앱 만들기
04장 데이트 피커 사용해 날짜 선택하기

📱 실행 화면 📱

⇨ 현재시간은 1초 마다 갱신된다.
⇨ Date Picker 에서 날짜를 선택하면 선택시간에 정해진 형식대로 출력한다.


💻 Step 1. Date Picker, Label 배치하기

Library(+) 에서 Date Picker 를 찾아 스토리보드에 배치하기
Attributes inspector 에서 Style 을 Wheels 로 변경하기
현재시간과 선택시간을 출력할 Label 2개 배치하기


💻 Step 2. Outlet 변수, Action 함수 추가하기

현재시간, 선택시간 레이블에 대한 아웃렛 변수 추가하기
Date Picker 에 대한 액션 함수 추가하기


💻 Step 3. 선택시간 출력 소스 코드 작성하기

@IBAction func changeDatePicker(_ sender: UIDatePicker) {
        let formatter = DateFormatter()
        formatter.dateFormat = "yyyy-MM-dd HH:mm EEE"
        lblPickerTime.text = "선택시간: " + formatter.string(from: sender.date)
    }
  • formatter 에 출력할 날짜 형식 지정하기
  • Date Picker 에서 날짜를 선택하면 sender 에 전달되고 그 안에 저장된 date 값을 지정한 형식대로 문자열로 변환한다.

💻 Step 4. 현재시간 출력 소스 코드 작성하기

class ViewController: UIViewController {
    let timeSelector: Selector = #selector(ViewController.updateTime)
    let interval = 1.0
  • 타이머가 구동되면 실행할 함수를 timeSelector 에 지정하기
  • 타이머 간격 1초로 지정하기

override func viewDidLoad() {
        super.viewDidLoad()
        // Do any additional setup after loading the view.
        
        Timer.scheduledTimer(timeInterval: interval, target: self, selector: timeSelector, userInfo: nil, repeats: true)
    }
  • 타이머 설정하기
    - timeInterval: 타이머 간격, 초 단위
    - target: selector 가 위치한 객체
    - selector: 타이머가 구동되었을 때 실행할 메소드
    - userInfo: 타이머가 구동되었을 때 함께 전달되는 사용자 정의 데이터
    - repeats: 타이머 반복 여부

@objc func updateTime() {
        let date = Date()
        let formatter = DateFormatter()
        formatter.dateFormat = "yyyy-MM-dd HH:mm:ss EEE"
        lblCurrentTime.text = "현재시간: " + formatter.string(from: date)
    }
  • 타이머가 구동되었을 때 실행할 메소드
  • Date() 를 통해 현재시간을 불러온다.
  • formatter 에 출력할 날짜 형식 지정하기
  • date 값을 지정한 형식대로 문자열로 변환한다.
  • 타이머 간격을 1초로 설정했으므로 1초마다 실행된다.

💻 Final Step. ViewController.swift 전체 소스 코드

import UIKit

class ViewController: UIViewController {
    let timeSelector: Selector = #selector(ViewController.updateTime)
    let interval = 1.0
    
    @IBOutlet var lblCurrentTime: UILabel!
    @IBOutlet var lblPickerTime: UILabel!
    
    override func viewDidLoad() {
        super.viewDidLoad()
        // Do any additional setup after loading the view.
        
        Timer.scheduledTimer(timeInterval: interval, target: self, selector: timeSelector, userInfo: nil, repeats: true)
    }

    @IBAction func changeDatePicker(_ sender: UIDatePicker) {
        let formatter = DateFormatter()
        formatter.dateFormat = "yyyy-MM-dd HH:mm EEE"
        lblPickerTime.text = "선택시간: " + formatter.string(from: sender.date)
    }
    
    @objc func updateTime() {
        let date = Date()
        let formatter = DateFormatter()
        formatter.dateFormat = "yyyy-MM-dd HH:mm:ss EEE"
        lblCurrentTime.text = "현재시간: " + formatter.string(from: date)
    }
}

✏️ 개념 알고가기

  • Selector : 메소드의 문자열 이름을 나타내는 타입
    - #selector 키워드를 통해 메소드 이름을 Selector 타입으로 만들 수 있다.
profile
언젠간 iOS 개발자가 되겠지

0개의 댓글