์๋ ํ์ธ์๐ ์ค๋ ์ ๋ง ์ง์ค๋ ์๋๊ณ , ์ ๋๋ก ๊ตฌํํด๋ธ ๊ฒ๋ ์๋ ํ๋ฃจ์ ๋๋ค.
๋ญ! ์ด๋ฐ ๋ ๋ ์๋ ๊ฑฐ๊ฒ ์ฃ ?!
UICalendarView ์์์ด ๋ญ๋ผ๊ณ ๋ด ๊ธฐ๋ฅผ ์ฃฝ์ฌ!
์ค๋ ๋ฐฐ์ด ๊ณต๋ถ๋ฅผ ์ ๋ฆฌํด๋ด ์๋ค~!
1์ผ 1๋ก๊ทธ 100์ผ ์์ฑ์ ์ฒซ ๋จ์ถ๋ฅผ ๊ฟฐ๋ฉ์๋๋ฐ์!
์ค๋์ ๋ด์ฉ์ ํ๋์จ์ด์ ์ญ์ฌ..? ์ปดํจํฐ์ ์ญ์ฌ..? ์ด์๋ ๊ฒ ๊ฐ์์! ( ์ฌ์ค ์ค๋ ์ข ๋์ถฉ.. ์ฝ.. ํฌํ .. )
์ค๋์ UICalenderView์์ ํด๋น ๋ ์ง๋ฅผ ํด๋ฆญํ์์ ๋,
์๋ก์ด ViewController๊ฐ ๋ฑ์ฅํ๋ฉด์ ๋ฌ๋ ฅ์ ๋ ์ง ํ์์ ๋๊ฒจ์ฃผ๋ ์ฝ๋๋ฅผ ์์ฑํ์ด์!
UICalendarSelectionSingleDateDelegate
UICalenderView์์๋ ๋จ์ผํ ๋ ์ง๋ฅผ ์ ํํ๊ธฐ ์ํด์๋ UICalenderS
electionSingleDateDelegate
์ด๋ผ๋ ๋ธ๋ฆฌ๊ฒ์ดํธ๋ฅผ ์ฑํํ๋ฉด ๋ฉ๋๋ค! ์ ํ ๊ฐ๋ฅํ ๋ ์ง์ ๋จ์ผ ๋ ์ง ์ ํ์ ๋ํ ๋ณ๊ฒฝ์ฌํญ๋ค์ ์ฒ๋ฆฌํด์ค ์ ์๋ ํ๋กํ ์ฝ์
๋๋ค!
๋ฌ๋ ฅ์์ ํน์ ๋ ์ง๋ฅผ ์ ํํ์ ๋์ ๋์ ๊ตฌํ ํจ์
func dateSelection(_ selection: UICalendarSelectionSingleDate, didSelectDate dateComponents: DateComponents?) {
// ๊ตฌํ
}
์์ ํจ์๋ฅผ ํตํด ๋ฌ๋ ฅ์์ ์ ํํ ๋ ์ง์ ๋ํ ์์ ์ ์ํํ ์ ์์ด์!
์ฒซ ๋ฒ์งธ ๋งค๊ฐ๋ณ์ selection: UICalendarSelectionSingleDate
๋ ์ ํ๋ ์บ๋ฆฐ๋์ ๊ฐ์ฒด์ด๊ณ ,
๋ ๋ฒ์งธ ๋งค๊ฐ๋ณ์ didSelectDate dateComponents: DateComponents?
๋ ์ ํ๋ ๋ ์ง์ dateComponents ๊ฐ์ฒด์
๋๋ค.
CalendarViewController์ ํ์ฅ ํด๋์ค
extension CalendarViewController: UICalendarSelectionSingleDateDelegate {
func dateSelection(_ selection: UICalendarSelectionSingleDate, didSelectDate dateComponents: DateComponents?) {
guard let dateComponents = dateComponents else { return }
// ์ ํํ ๋ ์ง๋ฅผ Date๋ก ๋ณํ
if let selectedDate = Calendar.current.date(from: dateComponents) {
showToDoListViewController(with: selectedDate)
} else {
print("DateComponents๋ฅผ Date๋ก ๋ณํ ์คํจ")
}
}
func showToDoListViewController(with date: Date) {
let storyboard = UIStoryboard(name: "Main", bundle: nil)
guard let toDoListViewController = storyboard.instantiateViewController(withIdentifier: "ToDoListViewController") as? ToDoListViewController else {
return
}
toDoListViewController.selectedDate = date
// ToDoListViewController๋ฅผ presentํ์ฌ ํ์
toDoListViewController.modalPresentationStyle = .overFullScreen
toDoListViewController.modalTransitionStyle = .coverVertical
present(toDoListViewController, animated: true, completion: nil)
}
}
์ ๋ ์๋ก์ด ViewController์๊ฒ ๋ ์ง๋ฅผ ์ ๋ฌํ๊ธฐ ์ํด ์์ ๊ฐ์ด ์ฝ๋๋ฅผ ์งฐ์ต๋๋ค.
์ ํ๋ ๋ ์ง์ dateComponents๋ฅผ ๋ฐ์ธ๋ฉํด์ค ๋ค Date๋ก ์ฌ์ฉํ๊ธฐ ์ํด์ ๊ฐ์ date๋ก ๋ณ๊ฒฝํด์ฃผ์์ด์.
โ๏ธ dateComponents๋ฅผ Dateํ์์ผ๋ก ๋ณ๊ฒฝ์ํค๋ ํจ์
let selectedDate = Calendar.current.date(from: dateComponents)
๋ค์ ํ๋ฉด์ ์ฐ๊ฒฐํด์ค ๋ค date๋ก ๋ฐ๊พผ ๊ฐ์ ๋๊ฒจ์ฃผ์์ด์!!
ํ๋ฉด์ ๋น ๋ถ๋ถ ํด๋ฆญ์ ํ๋ฉด ์ ํ
์ถ๊ฐ๋ก ๊ตฌํํ ๋ถ๋ถ์ ํ๋ฉด์ ๋น๋ถ๋ถ์ ํฐ์นํ์ ๋, ํ๋ฉด์ด ์ ํ๋ฉด์ผ๋ก ์ ํ๋๊ฒ๋ํ๋ ๊ฒ๋ ๊ตฌํ์ ํ์ด์!
// ํฐ์น ๊ฐ์ง์ฉ UITapGestureRecognizer ์์ฑ
let tapGesture = UITapGestureRecognizer(target: self, action: #selector(handleOutsideTap))
// ViewController์ view์ ์ถ๊ฐ
self.view.addGestureRecognizer(tapGesture)
ํด๋น ViewController ์ viewDidLoad() ํจ์ ๋ถ๋ถ์ ํฐ์น ๊ฐ์ง์ฉ UITapGestureRecognizer
๋ฅผ ์์ฑํด์ค๋๋ค.
view ๋ถ๋ถ์ ํฌ๋ช
์ผ๋ก ์ค์ ํด๋์ด์ view ๋ถ๋ถ์ ํฐ์น ๊ฐ์ง์ฉ UITapGestureRecognizer
๊ฐ ์ ์ฅ๋ tapGesture
๋ณ์๋ฅผ ์ถ๊ฐํด์ฃผ์์ด์!
// ๋ฐ๊นฅ์ชฝ ์์ญ ํฐ์น ์ ํธ์ถ๋ ๋ฉ์๋
@objc func handleOutsideTap() {
dismiss(animated: true, completion: nil)
}
์ถ๊ฐ๋ก ํด๋น ViewController์ ์์ ํจ์๋ง ๊ตฌํํด์ฃผ๋ฉด ๋ฉ๋๋ค!
ํฐ์น๊ฐ ๊ฐ์ง๋์์ ๋, ์คํ๋๋ ํจ์์์! ์ ํ๋ฉด์ผ๋ก ๋๋ ค์ฃผ๋ dismiss
ํจ์๋ฅผ ๋ฃ์ด์ฃผ์์ต๋๋ค!
์๊ฐ๋ณด๋ค ๊ฐ๋จํด์ ๋๋ฌ์ด์! ใ ใ
๊ตฌํํ๋ฉด
๊ณต๋ถ๋ฅผ ํ๋ฉด ํ ์๋ก ๋ถ์กฑํ ์ ์ด ๋ณด์ด๊ณ , ๋ ๊ณต๋ถํด์ผํ ๋ถ๋ถ์ด ๋ณด์ด๋ค์!
๊ทธ๋์ ๋ ์กฐ๊ธํ๊ฒ ๋งค์ผ ๋งค์ผ์ ๋ฌ๋ ค๊ฐ๋ ๊ฒ ๊ฐ์ต๋๋ค..!
์์ง ๋ชจ๋ฅด๋๊ฒ ์ฐ๋๋ฏธ์์!!!
์ค๋ ํ๋ฃจ๋ ์๊ณ ๋ง์์ด! ๋ด์ผ๋ ํ์ดํ !!!