본문 바로가기

iOS/STUDY

[iOS] UIDatePicker, UIGestureRecognizer

UIDatePicker

stotyboard 에 DatePicker 와 Label 올려두기

DateFormatter 를 사용하여 날짜를 Label 에 나타내기

let dateFormatter: DateFormatter = {
        let formatter: DateFormatter = DateFormatter()
        formatter.dateFormat = "yyyy/MM/dd hh:mm:ss"
        // formatter.dateStyle = .medium
        // formatter.timeStyle = .medium
        return formatter
    }()

1. format 을 직접 지정하려면 .dateFormat 을 변경해준다.

ex) "yyyy/MM/dd"

2. 기본 스타일: .dateStyle, .timeStyle

 

애플의 개발자 문서를 보면DateFormatter는 NSDate의 오브젝트라고한다.

나라별로 위치를 설정해서 시간을 나타낼 수도 있는듯

 

라벨에 날짜를 나타내기위해서 @IBAction func datePickerValueChanged 함수를 만들고 UIDatePicker를 sender로 받아온다.

String 변수를 만들어서 만들어둔 dateFormatter 에서 String을 가져온다. 

만든 String 변수를 UILabel 변수에 넣으면 완성 !

시간은 설정 안해뒀는데 Format에서 시간을 지우면된다.

 

Date Picker 스타일이 여러가지 있더라카더라 ㅇㅅㅇ

 

 

UITapGestureRecognizer

textField 에서 키보드가 올라오면 화면을 탭해서 키보드를 내리게하는 제스쳐를 추가해보자

3가지 방법으로 할 수 있다.

 

1. storyboard 에서 제스쳐 연결하기

2. Target-Action 패턴 사용하기

3. Delegate 패턴 사용하기

 

delegate 패턴만 적어보면 

UIGestureRecognizerDelegate 를 상속시키고

UITapGestureRecognizer 변수를 만들어서 delegate를 self로 설정한다.

UITapGestureRecognizer 변수를 view에다가 addGestureRecognizer로 추가한다.

override func viewDidLoad() {
    self.datePicker.addTarget(self, action: #selector(self.datePickerValueChanged(_:)), for: UIControl.Event.valueChanged)
}

func gestureRecognizer(_ gestureRecognizer: UIGestureRecognizer, shouldReceive touch: UITouch) -> Bool {
    self.view.endEditing(true)
    return true
}

 

delegate 디자인패턴은 더 다양한 상황에 맞는 동작들을 제어할 수 있고,

target-action 패턴은 단순한 상황에서 사용하기 편하다는 점!

'iOS > STUDY' 카테고리의 다른 글

[iOS] Singleton  (3) 2021.03.12
[iOS] UITextField 암호화 시 Strong Password  (0) 2021.03.08
[iOS] Delegate  (4) 2021.02.09
[iOS] View transition  (0) 2021.02.05
[iOS] modal 생성하기 (storyboard)  (0) 2021.02.05