티스토리 뷰

iOS

iOS) Date Picker

Zedd0202 2017. 11. 13. 16:21
반응형

안녕하세요 :) Zedd입니다.

UserNotification예제 만들다가..Date Picker를 오랜만에 만져보게 되었습니다ㅎㅎ

그래서 DatePicker에 여러가지 모드들과, Date Picker에서 고른 값을 가져오는 방법을 알아보겠습니다 :)



Date Picker 



Date Picker는 Delegate나 DataSource는 따로 없습니다. 

Main 스토리보드에서 Date Picker를 추가하면 이렇게 되죠?

오른쪽의 inspector에서 Mode와 같은 여러가지 속성을 바꿀 수 있습니다. 

모드에는 이렇게 4가지 모드가 있습니다. 




하나씩 살펴봅시다.



 dateAndTime




 date







 time




 countDownTimer


(이건 왜 영어로 나오는지....)


오른쪽 inspector보시면, 뭔지 다 대충 아실 수 있을거에요.

locale은 지역(Xcode상에서는 영어로 나오지만, 폰에 앱 올리시면 한국어로 나올거에요 XD(디바이스 언어가 한국어면!!))

intervale은 그 시간시간 사이의 간격을 의미합니다. 


음..저는 일단 Mode를 "time"으로 할게요.




그럼 이렇게 설정하면, 실시간으로 이 시간 정보는 어떻게 가져오냐?

(일단 저는 이 Date Picker를 코드로 만들어서...만약에 스토리보드에서 추가하셨다면, Date Picker에 IBAction을 추가할 수 있답니다. 그 IBAction안에 지금부터 할 코드를 넣어주세요.

만약에 코드로 Date Picker를 만드셨다면..

pickerView.addTarget(self, action: #selector(changed), for: .valueChanged)



이렇게 나의 pickerView에 addTarger을 해주세요. 그럼 selector메소드를 만들어야겠죠?

func changed(){

        //code

}



자. 이제 실시간으로 pickerView의 데이터를 가져와봅시다. 

저는 label에 update해줄거에요.

그러면 먼저 이 pickerView의 날짜/시간정보를 가져와야하는데, DateFormatter가 필요합니다. DateFormatter 객체를 하나 만들어줄게요.

func changed(){

      let dateformatter = DateFormatter()

}



이제 어떤 "모양"으로 날짜/시간을 가져오고 싶은지 정하면 됩니다. 

dateStyle과 timeStyle을 통해서 자기가 가져오고 싶은 모양을 가져오면돼요.

func changed(){

      let dateformatter = DateFormatter()

   dateformatter.dateStyle = .none

      dateformatter.timeStyle = .short

}



이런식으로요. none과 short는 제가 그냥 준건데, style에는 어떤게 있는지 살펴봅시다.


"종합적으로" DateFormatter.Style에는 5가지가 있는 것을 볼 수 있네요.

이 DateFormatter.Style을 date와 time에 각각 적용할 수 있는것입니다. 

25가지의 경우의 수가 나오겠네요 ㅎㅎ..


자 하나씩 살펴봅시다. 


 full

func changed(){

      let dateformatter = DateFormatter()

   dateformatter.dateStyle = .full

      dateformatter.timeStyle = .full

}


네! 2017 11 13 월요일 까지가 Date.

오후 2 57 25 대한민국 표준시 까지가 Time입니다. 

제가 굳이 DatePickerMode를 time으로 했는데도!! 날짜까지 다 나오죠? ㅎㅎ



 long


func changed(){

      let dateformatter = DateFormatter()

   dateformatter.dateStyle = .long

      dateformatter.timeStyle = .long

}


2017 11 13 까지가 Date

오후 3 1 16 GMT+9 까지가 Time입니다. 




 medium


func changed(){

      let dateformatter = DateFormatter()

   dateformatter.dateStyle = .medium

      dateformatter.timeStyle = .medium

}


2017. 11. 13까지가 Date

오후 3:02:29가 Time




 short


func changed(){

      let dateformatter = DateFormatter()

   dateformatter.dateStyle = .medium

      dateformatter.timeStyle = .medium

}





2017. 11. 13까지 Date.

오후 3:07가 time



 none

자, none은 이름에서 볼 수 있듯이 아무것도 없는거죠? date와 time을 둘다 none으로 설정해버리면 아무것도 안나옵니다.

그러니까 아 나는 날짜는 빼고, 시간만 나오게 하고싶어!!라고 할 때 유용하겠죠.

제가 pickerMode를 time으로 했었죠?

그럼 앞에 날짜는 굳이 필요없으니까...


func changed(){

       let dateformatter = DateFormatter()

       dateformatter.dateStyle = .none

       dateformatter.timeStyle = .short

}



이렇게 해버리면 되겠죠

이렇게요 :)




지금까지 DateFormatter.Style을 살펴본거고!!!!!아직 label에 업데이트 하는 방법을 알려드리지 않았네요.

label의 text에는 "String"만 들어갈 수 있죠? 그래서 우리는 이 날짜/시간 데이터를 String으로 만들어야 합니다. 

그리고 그렇게 String으로 변환한 날짜/시간을 저희 label에 넣어주면 되겠죠.


func changed(){

       let dateformatter = DateFormatter()

       dateformatter.dateStyle = .none

       dateformatter.timeStyle = .short

       let date = dateformatter.string(from: pickerView.date)

        myLabel.text = date

}

이렇게요!!

ㅎㅎ


간--------

핳ㅎㅎ 오늘도 도움이 되었길 바라며!! 다음글은 UserNotification(2탄)글이 될 것 같아요.

1탄은 < 왕초보를 위한 UserNotification >를 참고해주세요 :)






반응형