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

FSCalendar은 iOS 앱에서 캘린더 기능을 구현할 수 있는 라이브러리입니다. 이 라이브러리를 사용하여 특정 날짜에 이벤트 리스트 아이콘을 표시하는 방법을 알아보겠습니다.

1. FSCalendar 라이브러리 추가

FSCalendar를 사용하려면 먼저 프로젝트에 라이브러리를 추가해야 합니다. FSCalendar는 Cocoapods에서 제공되기 때문에, 프로젝트의 Podfile에 다음과 같이 추가해주세요.

pod 'FSCalendar'

그리고 터미널에서 pod install 명령어를 실행하여 라이브러리를 설치합니다.

2. 이벤트 데이터 준비

특정 날짜에 이벤트 리스트 아이콘을 표시하기 위해서는 해당 날짜의 이벤트 데이터를 준비해야 합니다. 예를 들어, 이벤트 데이터는 배열 형태로 저장되어 있다고 가정하겠습니다.

let eventDates = ["2022-09-01", "2022-09-05", "2022-09-10"]

3. FSCalendarDelegate의 willDisplay 메소드 구현

FSCalendarDelegate 프로토콜을 채택한 클래스에서 calendar(_:willDisplay:for:at:) 메소드를 구현하여 특정 날짜에 이벤트 리스트 아이콘을 표시할 수 있습니다. 해당 메소드에서는 이벤트 데이터를 확인하고, 이벤트가 있는 날짜에만 아이콘을 표시합니다.

func calendar(_ calendar: FSCalendar, willDisplay cell: FSCalendarCell, for date: Date, at monthPosition: FSCalendarMonthPosition) {
    let dateFormatter = DateFormatter()
    dateFormatter.dateFormat = "yyyy-MM-dd"
    let dateString = dateFormatter.string(from: date)
    
    if eventDates.contains(dateString) {
        let eventIcon = UIImageView(image: UIImage(named: "event_icon"))
        cell.addSubview(eventIcon)
        eventIcon.translatesAutoresizingMaskIntoConstraints = false
        eventIcon.centerXAnchor.constraint(equalTo: cell.contentView.centerXAnchor).isActive = true
        eventIcon.centerYAnchor.constraint(equalTo: cell.contentView.centerYAnchor).isActive = true
    }
}

위의 코드에서, event_icon은 이벤트 아이콘 이미지 파일의 이름입니다. 만약 이미지 파일이름이 다르다면, 해당 이미지 파일의 이름으로 수정해주어야 합니다.

4. FSCalendarDelegate의 didDeselect 메소드 구현 (선택 해제를 위한 구현)

만약, 선택된 날짜의 이벤트 리스트 아이콘을 해제하려면 FSCalendarDelegate 프로토콜을 채택한 클래스에서 calendar(_:didDeselect:at:) 메소드를 구현합니다.

func calendar(_ calendar: FSCalendar, didDeselect date: Date, at monthPosition: FSCalendarMonthPosition) {
    let dateFormatter = DateFormatter()
    dateFormatter.dateFormat = "yyyy-MM-dd"
    let dateString = dateFormatter.string(from: date)
    
    if eventDates.contains(dateString) {
        if let cell = calendar.cell(for: date, at: monthPosition) {
            for subview in cell.contentView.subviews {
                if let eventIcon = subview as? UIImageView {
                    eventIcon.removeFromSuperview()
                }
            }
        }
    }
}

위의 코드에서, 이벤트 아이콘을 해제하기 위해선 해당 아이콘을 부모 뷰에서 삭제하면 됩니다.

결론

위의 방법을 통해 FSCalendar에서 특정 날짜의 이벤트 리스트 아이콘을 표시할 수 있습니다. 이를 통해 사용자들은 캘린더에서 이벤트를 한 눈에 확인할 수 있게 됩니다.

참고 자료