강의 영상
2) Target-Action 디자인 패턴의 활용
- Target-Action 디자인패턴 활용
- 영상 우측 하단에 자막 스크립트 ON 설정을 한 후 강의를 시청하시면 학습에 도움이 됩니다.
Target-Action 디자인패턴을 활용하여 UIDatePicker를 사용해봅니다.
UIDatePicker
Date Picker는 날짜 및 시간을 입력하는 컨트롤입니다. Date picker를 이용하여 특정 시점의 날짜와 시간 또는 시간 간격을 입력할 수 있습니다.
Date picker를 인터페이스에 추가하기
- Date picker를 생성하고 모드를 설정합니다.
- 필요한 경우 최소 및 최대 날짜와 같은 추가 구성 옵션을 제공합니다.
- Date picker에 액션 메서드를 연결합니다.
Date picker에 액션 메서드 연결하기
Date picker는 사용자가 선택된 날짜를 바꿀 경우 애플리케이션에 알리기 위해 타깃 액션 디자인 패턴을 사용합니다. Date picker의 값이 변경될 때 알림을 받기 위해 액션 메서드를 valueChanged
로 설정합니다. 실행시점에서 Date picker는 사용자의 날짜 및 시간 선택하게되면 설정된 액션 메서드를 호출합니다. Date picker를 액션 메서드에 연결하기 위해 인터페이스 빌더를 이용하거나 코드로 addTarget(_:action:for:)
메서드를 사용합니다.
Date Picker의 주요 인터페이스 빌더 속성
Mode
: Date picker의 모드를 설정합니다. 코드상으로datePickerMode
프로퍼티를 사용하여 이 값에 접근할 수 있습니다.Locale
: Date picker에 사용될 로케일입니다. 코드상으로locale
프로퍼티를 통해 이 값에 접근할 수 있습니다.Interval
: 현재 선택된 모드의 분 간격을 나타냅니다. 선택한 값은 60의 제수여야합니다.minnuteInterval
프로퍼티를 통해 이 값에 접근할 수 있습니다.Date
: Date picker가 처음 보여주게 될 날짜를 설정할 수 있습니다. 기본값은 현재 날짜로 설정되어 있습니다.date
프로퍼티를 통해 접근할 수 있습니다.Constraints
: Date 하단의 Minimum Date와 MaximumDate를 통해 Date picker가 보여줄 날짜의 범위를 설정할 수 있습니다.minimumDate
,maximumDate
프로퍼티를 통해 설정할 수 있습니다.Timer
: 카운트다운 타이머 모드에서 date picker의 표시되는 초기값입니다. 값은 초 단위로 계산되지만 보이는 것은 분 단위로 표시됩니다.countDownDuration
프로퍼티를 통해 이 값에 접근할 수 있습니다.
UIDatePicker 클래스의 주요 프로퍼티
var datePickerMode: UIDatePickerMode
: Date picker의 모드를 결정합니다.- 기본값은
dateAndTime
입니다. time
,date
,dateAndTime
,countDownTimer
네가지 모드를 설정할 수 있습니다.
- 기본값은
var date: Date
: date picker에 보여지게 될 날짜입니다.var calendar: Calendar!
: date picker에 사용되는 캘린더입니다.var locale: Locale?
: date picker에서 사용하는 로케일입니다.var timeZone: TimeZone?
: date picker에서 표시된 날짜에 반영된 시간대입니다.var maximumDate: Date?
: date picker에서 보여줄 수 있는 최대 날짜입니다.var minimumDate: Date?
: date picker에서 보여줄 수 있는 최소 날짜입니다.minuteInterval: Int
: date picker에서 분을 표시하는 간격입니다. 기본값과 최솟값은 1이고 최댓값은 30입니다.var countDownDuration: TimeInterval
: date picker의 모드가 countDownTimer로 설정될 경우 date picker에 표시되는 초깃값입니다.
UIDatePicker 클래스의 주요 메서드
func setDate(Date, animated: Bool)
: date picker에 처음 표시할 날짜를 설정합니다.
DateFormatter
DateFormatter는 날짜와 텍스트 표현 간의 변환을 할 수 있게 해줍니다. DateFormatter를 활용해 날짜와 시간을 다양한 방식으로 출력하거나 출력된 날짜 및 시간에 대한 문자열을 읽어올 수 있습니다.
DateFormatter의 인스턴스는 Date 객체의 문자열 표현을 생성하고, 날짜 및 시간의 텍스트 표현을 Date 객체로 변환합니다.
사용자 날짜 및 시간 표현
사용자에게 날짜를 표시할 때 특정 요구 사항에 따라 date formatter의 dateStyle
과 timeStyle
프로퍼티를 설정합니다. 예를 들어, 만약에 시간을 제외한 월, 일, 연도를 보여주고 싶다면, dateStyle
프로퍼티를 long
으로 설정하고 timeStyle
을 none으로 설정합니다. 반대로 시간만 보여주고 싶다면 dateStyle
프로퍼티를 none으로 timeStyle
프로퍼티를 short로 설정합니다. dateStyle
과 timeStyle
프로퍼티의 값을 기반으로 DateFormatter는 지정된 로케일에 적합한 지정된 날짜의 표현을 제공합니다. 미리 정의된 스타일을 통해 얻을 수 없는 형식을 지정해야 한다면 setLocalizedDateFormatFromTemplate(_:)
을 사용하여 날짜 형식을 지정할 수 있습니다.
고정 형식 날짜 표현
RFC3339와 같은 고정 형식의 날짜로 사용해야 한다면, dateFormat
프로퍼티를 특정 포맷 문자열로 설정합니다. 대부분의 경우 고정된 형식의 경우 locale
프로퍼티를 POSIX locale("en_US_POSIX")로 설정하고, timeZone
프로퍼티를 UTC로 설정합니다.
DateFormatter의 주요 프로퍼티와 메서드
func date(from: String)
: 주어진 문자열을 Date 객체(날짜와 시간)로 변환하여 반환합니다.func string(from: Date)
: 주어진 Date 객체를 문자열로 변환하여 반환합니다.func setLocalizedDateFormatFromTemplate(String)
: 지정된 로케일을 사용하여 날짜 형식을 설정합니다.var dateStyle: DateFormatter.Style
: DateFormatter의 날짜 형식입니다.var timeStyle: DateFormatter.Style
: DateFormatter의 시간 형식입니다.var dateFormat: String!
: 고정 형식 날짜 표현을 사용할 때의 날짜 형식입니다.var locale: Locale!
: DateFormatter의 로케일입니다.var timeZone: TimeZone!
: DateFormatter의 시간대입니다.
예제 코드
- 날짜 형식(Date 객체) -> 문자열 형식(textual representation)
import UIKit
let dateFormatter = DateFormatter()
dateFormatter.dateStyle = .full
dateFormatter.timeStyle = .none
let date = Date(timeIntervalSinceReferenceDate: 118800)
// US English Locale (en_US)
dateFormatter.locale = Locale(identifier: "en_US")
print(dateFormatter.string(from: date)) // Tuesday, January 2, 2001
// KOR Korean Locale (ko_KR)
dateFormatter.locale = Locale(identifier: "ko_KR")
print(dateFormatter.string(from: date)) // 2001년 1월 2일 화요일
- 문자열 형식 -> 날짜 형식
import UIKit
let dateFormatter = DateFormatter()
let dateString = "1970-01-01 08:03:30 +0000"
dateFormatter.dateFormat = "yyyy-MM-dd HH:mm:ss ZZZ"
print(dateFormatter.date(from: dateString)!) // 1970-01-01 08:03:30 +0000
참고 링크
- UIDatePicker - UIKit | Apple Developer Documentation
https://developer.apple.com
- Date - Foundation | Apple Developer Documentation
https://developer.apple.com
- DateFormatter - Foundation | Apple Developer Documentation
https://developer.apple.com
- Introduction to Data Formatting Programming Guide For Cocoa
https://developer.apple.com
- NSDateFormatter and Internet Dates
https://developer.apple.com
- About Internationalization and Localization
https://developer.apple.com
comment
self.datePicker.addTarget()가 아니라 self.datePicker.addTarget()이라고 하는 이유가 무엇인가요?
iOS 14 버전에서는 데이트피커 기본 모양이 달력 형식으로 변했습니다.
스토리 보드에서 데이트피커 설정에서 preferred style : Automatic 이 아닌 wheels로 바꾸시면 강의처럼 할 수 있습니다!
UIControlEvents.valueChanged ---> UIControl.Event.valueChanged
동영상 강의에서 dateFormatter를 선언하는 방식이 조금 낯설어서 질문합니다.
let dateFormatter: DateFormatter = {
}()
이 방식은 저장 프로퍼티를 초기화하는 한 방법인가요??
제가 알고 있는 일반적인 저장 프로퍼티나 연산 프로퍼티 형태가 아니라 궁금합니다.