[swift] FSCalendar에서 특정 날짜의 이벤트 표시 스타일 설정

FSCalendar은 iOS 앱에서 사용할 수 있는 매우 유용한 캘린더 컴포넌트입니다. 이 컴포넌트를 사용하여 캘린더에 이벤트를 표시하는 방법을 알아보겠습니다.

1. 이벤트를 표시할 날짜 준비하기

FSCalendar은 이벤트를 표시하기 위해 FSCalendarDelegate 프로토콜의 calendar(_:numberOfEventsFor:) 메서드를 사용합니다. 이 메서드에서 특정 날짜에 표시할 이벤트의 개수를 반환해야 합니다.

func calendar(_ calendar: FSCalendar, numberOfEventsFor date: Date) -> Int {
    // 특정 날짜에 표시할 이벤트의 개수를 반환한다.
}

2. 이벤트 표시 스타일 설정하기

이벤트를 표시하기 위해 FSCalendarDelegate 프로토콜의 calendar(_:appearance:eventSelectionColorsFor:) 메서드를 사용합니다. 이 메서드에서 특정 날짜의 이벤트 표시 스타일을 설정할 수 있습니다.

func calendar(_ calendar: FSCalendar, appearance: FSCalendarAppearance, eventSelectionColorsFor date: Date) -> [UIColor]? {
    // 특정 날짜에 대한 이벤트 표시 스타일을 반환한다.
}

이 메서드에서 반환하는 값은 UIColor 객체의 배열입니다. 배열의 크기만큼 이벤트를 표시하며, 각각의 이벤트는 해당 인덱스에 해당하는 색상으로 표시됩니다.

3. 이벤트 표시 스타일 적용 예제

아래는 실제로 특정 날짜의 이벤트를 표시하는 예제입니다. 5월 1일부터 5일까지의 날짜에 이벤트가 있을 경우, 각각 다른 색상으로 표시하는 예제입니다.

func calendar(_ calendar: FSCalendar, numberOfEventsFor date: Date) -> Int {
    let calendar = Calendar.current
    let components = calendar.dateComponents([.year, .month, .day], from: date)
    let events = [
        calendar.date(from: DateComponents(year: 2022, month: 5, day: 1)),
        calendar.date(from: DateComponents(year: 2022, month: 5, day: 2)),
        calendar.date(from: DateComponents(year: 2022, month: 5, day: 3)),
        calendar.date(from: DateComponents(year: 2022, month: 5, day: 4)),
        calendar.date(from: DateComponents(year: 2022, month: 5, day: 5))
    ]
    
    if let date = components.date, events.contains(date) {
        return 1
    } else {
        return 0
    }
}

func calendar(_ calendar: FSCalendar, appearance: FSCalendarAppearance, eventSelectionColorsFor date: Date) -> [UIColor]? {
    let calendar = Calendar.current
    let components = calendar.dateComponents([.year, .month, .day], from: date)
    let events = [
        calendar.date(from: DateComponents(year: 2022, month: 5, day: 1)),
        calendar.date(from: DateComponents(year: 2022, month: 5, day: 2)),
        calendar.date(from: DateComponents(year: 2022, month: 5, day: 3)),
        calendar.date(from: DateComponents(year: 2022, month: 5, day: 4)),
        calendar.date(from: DateComponents(year: 2022, month: 5, day: 5))
    ]
    
    if let date = components.date, events.contains(date) {
        return [UIColor.red, UIColor.blue, UIColor.green, UIColor.yellow, UIColor.orange]
    } else {
        return nil
    }
}

위 예제에서는 numberOfEventsFor 메서드에서 5월 1일부터 5일까지의 날짜에 대한 이벤트 개수를 반환하고, eventSelectionColorsFor 메서드에서는 해당 날짜의 이벤트를 다른 색상으로 설정하고 있습니다.

이제 이 예제를 참고하여 FSCalendar에서 특정 날짜의 이벤트 표시 스타일을 설정할 수 있습니다.

참고 자료