[swift] FSCalendar에서 날짜 범위 선택 기능

FSCalendar는 iOS 앱에서 캘린더를 표시하고 관리하는 데 유용한 라이브러리입니다. 여기에서는 FSCalendar를 사용하여 날짜 범위를 선택하는 기능을 구현하는 방법을 살펴보겠습니다.

1. FSCalendar 라이브러리 설치하기

먼저, 프로젝트에 FSCalendar 라이브러리를 설치해야 합니다. FSCalendar는 CocoaPods를 통해 쉽게 설치할 수 있습니다. Podfile에 다음과 같이 추가한 후, pod install 명령을 실행하여 라이브러리를 설치합니다.

pod 'FSCalendar'

2. 캘린더 뷰 생성하기

FSCalendar를 사용하기 위해 먼저 캘린더 뷰를 생성해야 합니다. 캘린더 뷰는 일반적인 방식으로 생성할 수 있습니다. 예를 들어, 캘린더 뷰를 IBOutlet으로 연결하거나 코드로 생성할 수 있습니다.

@IBOutlet weak var calendarView: FSCalendar!

override func viewDidLoad() {
    super.viewDidLoad()
    
    calendarView.delegate = self
    calendarView.dataSource = self
}

3. 날짜 범위 선택 기능 추가하기

이제 날짜 범위 선택 기능을 추가할 수 있습니다. FSCalendarDelegate를 구현하고 didSelect 메서드를 사용하여 날짜가 선택될 때마다 해당 날짜의 상태를 변경합니다.

// FSCalendarDelegate 구현

func calendar(_ calendar: FSCalendar, didSelect date: Date, at monthPosition: FSCalendarMonthPosition) {
    guard let selectedStartDate = calendarView.selectedDates.first,
          let selectedEndDate = calendarView.selectedDates.last else {
              // 선택된 날짜가 없으면 리턴
              return
    }
    
    if date < selectedStartDate || date > selectedEndDate {
        // 선택된 범위를 벗어나는 날짜는 선택되어 있지 않도록 설정
        calendar.deselect(date)
    } else {
        // 선택된 범위 내의 날짜는 선택되도록 설정
        calendar.select(date)
    }
}

위 코드에서는 선택된 날짜 범위 내에 있는 날짜만 선택되도록 설정하였습니다. 이렇게 구현하면 사용자가 캘린더에서 마우스로 날짜를 선택할 때, 선택한 범위 내의 날짜만 선택되도록 제한할 수 있습니다.

4. 추가적인 기능 구현하기

위의 예제에서는 선택한 날짜 범위 내의 날짜만을 선택할 수 있도록 구현하였지만, 실제 사용에 따라 다른 동작이 필요할 수 있습니다. 예를 들어, 선택한 날짜 범위가 교차되지 않도록 하거나 시작 날짜와 종료 날짜 사이의 모든 날짜를 선택하도록 할 수도 있습니다. 이러한 추가적인 기능을 구현하기 위해서는 didSelect 메서드를 수정하면 됩니다.

참고 자료