[swift] FSCalendar에서 이벤트 표시 위치 설정

FSCalendar는 iOS 앱에서 캘린더 기능을 제공하는 라이브러리입니다. 이 라이브러리를 사용하여 앱에 이벤트를 표시하려면 기본적으로 캘린더 날짜 아래에 표시됩니다. 하지만 때로는 이벤트 표시 위치를 변경하고 싶을 수 있습니다. 이번 블로그 포스트에서는 FSCalendar에서 이벤트 표시 위치를 설정하는 방법을 알아보겠습니다.

이벤트 표시 위치 설정 방법

FSCalendar에서 이벤트 표시 위치를 변경하기 위해서는 다음과 같은 단계를 따라야 합니다.

  1. dataSource 프로토콜을 구현해야 합니다.
  2. calendar:hasEventForDate: 메서드를 구현하여 이벤트가 있는 날짜인지 확인합니다.
  3. delegate 프로토콜을 구현해야 합니다.
  4. calendar:cellForDate:atMonthPosition:reusingCell: 메서드를 구현하여 셀을 반환합니다.
  5. 셀 내부에서 이벤트 표시 위치를 설정합니다.

먼저, dataSource 프로토콜을 구현해야 합니다. 이는 FSCalendarDataSource 프로토콜을 채택하여 구현할 수 있습니다. calendar:hasEventForDate: 메서드를 구현하여 해당 날짜에 이벤트가 있는지 확인합니다. 이 메서드는 불리언 값을 반환해야 합니다.

func calendar(_ calendar: FSCalendar, hasEventFor date: Date) -> Bool {
    // 이벤트가 있는지 확인하는 로직을 작성합니다.
    return true // 이벤트가 있는 경우 true, 없는 경우 false를 반환합니다.
}

다음으로, delegate 프로토콜을 구현해야 합니다. 이는 FSCalendarDelegate 프로토콜을 채택하여 구현할 수 있습니다. calendar:cellForDate:atMonthPosition:reusingCell: 메서드를 구현하여 캘린더 셀을 반환합니다. 이 메서드는 FSCalendarCell 오브젝트를 반환해야 합니다.

func calendar(_ calendar: FSCalendar, cellFor date: Date, at monthPosition: FSCalendarMonthPosition, reusing reusedCell: FSCalendarCell?) -> FSCalendarCell {
    let cell = reusedCell ?? FSCalendarCell()
    // 셀 내부에서 이벤트 표시 위치를 설정하는 로직을 작성합니다.
    return cell
}

셀 내부에서 이벤트 표시 위치를 설정하기 위해 cell 오브젝트의 하위 뷰에 대한 접근이 필요할 수 있습니다. 이를 위해 cell 오브젝트의 하위 뷰를 확인하고 해당 뷰의 위치를 수정할 수 있습니다. 예를 들어, 이벤트 표시 아이콘을 셀의 오른쪽 상단에 표시하고 싶다면 다음과 같이 작성할 수 있습니다.

let eventImageView = UIImageView(image: UIImage(named: "event_icon"))
eventImageView.frame.origin = CGPoint(x: cell.bounds.width - eventImageView.bounds.width, y: 0)
cell.addSubview(eventImageView)

위와 같이 하위 뷰를 추가하고 위치를 조정함으로써 이벤트 표시 위치를 변경할 수 있습니다.

이렇게 FSCalendar를 사용하여 이벤트 표시 위치를 설정할 수 있습니다. 필요에 따라 이를 수정하여 앱에 맞는 캘린더 UI를 구현해보세요.

참고 자료