[swift] FSCalendar에서 특정 날짜에 이벤트 추가하기

FSCalendar은 iOS 앱에서 캘린더 기능을 구현할 때 사용되는 오픈 소스 라이브러리입니다. 이 라이브러리를 사용하여 특정 날짜에 이벤트를 추가하는 방법에 대해 알아보겠습니다.

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

FSCalendar를 사용하기 위해 먼저 해당 라이브러리를 설치해야 합니다. CocoaPods를 사용한다면 Podfile에 다음과 같이 추가합니다.

target 'YourApp' do
  pod 'FSCalendar'
end

Podfile에 추가한 후에는 터미널에서 pod install 명령어를 실행하여 라이브러리를 설치합니다.

2. 이벤트 데이터 구조 만들기

이벤트 데이터를 저장하기 위한 구조를 만들어야 합니다. 예를 들어 Event라는 구조체를 만들고, 이벤트의 날짜와 상세 내용을 저장할 수 있도록 해보겠습니다.

struct Event {
  let date: Date
  let description: String
}

3. FSCalendarDelegate 메소드 구현하기

FSCalendarDelegate 프로토콜의 메소드를 구현하여 특정 날짜에 이벤트를 표시할 수 있습니다. calendar:appearance:eventDefaultColorsForDate: 메소드에서 이벤트가 있는 날짜의 색상을 변경할 수 있습니다.

func calendar(_ calendar: FSCalendar, appearance: FSCalendarAppearance, eventDefaultColorsFor date: Date) -> [UIColor]? {
  let events = // 이벤트 데이터를 가져오는 코드
  let eventDates = events.map { $0.date }
  
  if eventDates.contains(date) {
    return [UIColor.red] // 이벤트가 있는 날짜는 빨간색으로 표시
  }
  
  return nil
}

4. 이벤트 데이터 가져오기

실제 이벤트 데이터를 가져오는 방법은 프로젝트에 따라 다를 수 있습니다. 예를 들어 HTTP 요청을 통해 서버에서 가져올 수도 있고, 로컬 데이터베이스에서 가져올 수도 있습니다. 이 예제에서는 간단하게 하드코딩된 데이터를 사용하도록 하겠습니다.

func getEvents() -> [Event] {
  let today = Date()
  
  let event1 = Event(date: today, description: "Important event 1")
  
  let twoDaysFromNow = Calendar.current.date(byAdding: .day, value: 2, to: today)!
  let event2 = Event(date: twoDaysFromNow, description: "Important event 2")
  
  return [event1, event2]
}

5. FSCalendar에 이벤트 표시하기

FSCalendar 인스턴스를 생성한 후, dataSourcedelegate를 설정합니다. 그리고 schudleLayout(for header: FSCalendarHeader) 메소드를 호출하여 레이아웃을 업데이트합니다.

let calendar = FSCalendar(frame: CGRect(x: 0, y: 0, width: 300, height: 300))
calendar.dataSource = self
calendar.delegate = self
calendar.register(FSCalendarCell.self, forCellReuseIdentifier: "Cell")
calendar.reloadData()
calendar.scheduleLayout(for: .header)

위의 코드에서 self는 FSCalendarDelegate와 FSCalendarDataSource를 구현한 객체를 가리킵니다.

6. 결과 확인하기

이제 앱을 실행하면 FSCalendar에 이벤트가 있는 특정 날짜가 빨간색으로 표시될 것입니다.

이러한 방식으로 FSCalendar에 특정 날짜에 이벤트를 추가하고 표시할 수 있습니다. 필요에 따라 이벤트를 터치하거나 상세 정보를 보여줄 수도 있습니다. FSCalendar는 많은 다른 기능과 설정을 제공하므로, 자세한 내용은 공식 문서를 참조하시기 바랍니다.

참고: 본 게시물은 FSCalendar 라이브러리의 2.8.0 버전을 기준으로 작성되었습니다.