[swift] FSCalendar에서 특정 날짜의 이벤트 리스트 개수 표시

FSCalendar는 iOS 애플리케이션에서 사용할 수 있는 유연하고 사용하기 쉬운 달력 라이브러리입니다. 이 라이브러리를 사용하여 특정 날짜에 이벤트가 있는지를 확인하고 개수를 표시하는 방법에 대해 알아보겠습니다.

1. 이벤트 데이터 설정하기

FSCalendar에서 특정 날짜의 이벤트 개수를 표시하려면 먼저 이벤트 데이터를 설정해야 합니다. 예를 들어, events라는 배열에 각 날짜에 해당하는 이벤트 개수를 저장할 수 있습니다. 다음은 이벤트 데이터를 설정하는 예시 코드입니다.

var events: [String: Int] = [:]

func setEventCountForDate(date: Date, eventCount: Int) {
    let dateFormatter = DateFormatter()
    dateFormatter.dateFormat = "yyyy-MM-dd"
    let dateString = dateFormatter.string(from: date)
    events[dateString] = eventCount
}

2. 셀 스타일 변경하기

FSCalendar에서 특정 날짜의 셀을 커스텀하기 위해서는 calendar:subtitleForDate 메서드를 사용해야 합니다. 이 메서드는 날짜 셀의 부제목을 반환하는데, 이를 이용하여 이벤트 개수를 표시할 수 있습니다. 다음은 calendar:subtitleForDate 메서드를 구현하는 예시 코드입니다.

func calendar(_ calendar: FSCalendar, subtitleFor date: Date) -> String? {
    let dateFormatter = DateFormatter()
    dateFormatter.dateFormat = "yyyy-MM-dd"
    let dateString = dateFormatter.string(from: date)
    if let eventCount = events[dateString] {
        return "\(eventCount)"
    }
    return nil
}

위 코드에서는 events 배열에서 해당 날짜의 이벤트 개수를 가져와서 부제목으로 반환합니다. 이벤트가 없을 경우 nil을 반환하도록 처리되어 있습니다.

3. 셀 스타일 적용하기

마지막으로 FSCalendar에서 설정한 셀 스타일이 적용되도록 설정해야 합니다. calendar:cellForItem 메서드를 사용하여 셀 스타일을 적용할 수 있습니다. 다음은 이를 구현하는 예시 코드입니다.

func calendar(_ calendar: FSCalendar, cellFor date: Date, at position: FSCalendarMonthPosition) -> FSCalendarCell {
    let cell = calendar.dequeueReusableCell(withIdentifier: "cell", for: date, at: position)
    
    let dateFormatter = DateFormatter()
    dateFormatter.dateFormat = "yyyy-MM-dd"
    let dateString = dateFormatter.string(from: date)
    if let eventCount = events[dateString] {
        cell.titleLabel.text = "\(eventCount)"
    }
    
    return cell
}

위 코드에서는 calendar.dequeueReusableCell(withIdentifier:for:at:) 메서드를 이용하여 캘린더 셀을 가져온 다음, 해당 날짜의 이벤트 개수를 셀의 제목으로 설정합니다. 이벤트가 없는 경우에는 기본 설정된 셀 스타일을 유지합니다.

이렇게 FSCalendar에서 특정 날짜의 이벤트 리스트 개수를 표시할 수 있습니다. 각 달력 셀의 스타일을 조절하고 이벤트 데이터를 적용하여 사용자가 직관적으로 이벤트 개수를 확인할 수 있도록 만들 수 있습니다.

참고 자료