[swift] FSCalendar에서 특정 날짜의 이벤트 액션 파일 열기 설정

FSCalendar는 iOS 앱에서 사용자가 날짜를 선택할 수 있는 캘린더 뷰를 제공해주는 라이브러리입니다. 이 글에서는 FSCalendar를 사용하여 특정 날짜를 선택했을 때 파일을 열 수 있는 기능을 추가하는 방법에 대해 알아보겠습니다.

1. 이벤트 데이터 준비하기

먼저 날짜별로 열 파일의 정보를 저장할 데이터를 준비해야 합니다. 예를 들어, 마크다운 파일을 열기 위한 파일 경로를 저장하는 딕셔너리를 사용할 수 있습니다. 아래는 예시입니다:

let eventDict: [String: String] = [
    "2022-01-01": "path/to/file1.md",
    "2022-02-14": "path/to/file2.md",
    // 추가적인 날짜의 파일 정보를 여기에 추가할 수 있습니다
]

위의 예시에서는 “2022-01-01” 날짜에 해당하는 파일 경로가 “path/to/file1.md”로 지정되어 있습니다. 이와 같이 날짜별로 파일 경로를 저장하는 딕셔너리를 만들어주세요.

2. FSCalendarDelegate 사용하기

FSCalendarDelegate 프로토콜을 구현하여 특정 날짜를 선택했을 때 액션을 수행할 수 있습니다. 아래는 FSCalendarDelegate 프로토콜의 calendar(_:didSelect:date:at:) 메서드를 사용한 예시입니다:

extension YourViewController: FSCalendarDelegate {
    
    func calendar(_ calendar: FSCalendar, didSelect date: Date, at monthPosition: FSCalendarMonthPosition) {
        let dateFormatter = DateFormatter()
        dateFormatter.dateFormat = "yyyy-MM-dd"
        let selectedDate = dateFormatter.string(from: date)
        
        // eventDict에서 선택한 날짜에 해당하는 파일 정보를 가져옴
        if let filePath = eventDict[selectedDate] {
            openFile(at: filePath)
        }
    }
    
    func openFile(at filePath: String) {
        // 파일을 열기 위한 코드 작성
        // 예를 들어, 메모앱에서 파일을 열려면 다음과 같은 코드를 사용할 수 있습니다:
        // let url = URL(fileURLWithPath: filePath)
        // UIApplication.shared.open(url)
    }
}

위의 예시에서는 calendar(_:didSelect:date:at:) 메서드를 사용하여 선택한 날짜를 문자열로 변환하고, 그 날짜에 해당하는 파일 경로를 eventDict에서 가져옵니다. 파일 경로를 가져온 후에는 openFile(at:) 메서드를 호출하여 파일을 열 수 있는 코드를 작성하면 됩니다.

3. FSCalendar 설정

마지막으로 FSCalendar 인스턴스에 delegate를 설정하고 이벤트를 표시하는 방법을 알아보겠습니다. 예를 들어, 아래의 코드를 사용하여 캘린더를 초기화하고 delegate를 설정할 수 있습니다:

let calendar = FSCalendar(frame: CGRect(x: 0, y: 0, width: 320, height: 300))
calendar.delegate = self

더 나아가서, 날짜에 이벤트가 있는 경우 이벤트를 표시할 수도 있습니다. 이는 FSCalendarDelegate 메서드인 calendar(_:numberOfEventsFor:date:)를 구현하여 수행할 수 있습니다. 예를 들어, 아래의 코드를 사용하여 이벤트가 있는 날짜에 원형 표시를 추가할 수 있습니다:

extension YourViewController: FSCalendarDelegate {
    
    func calendar(_ calendar: FSCalendar, numberOfEventsFor date: Date) -> Int {
        let dateFormatter = DateFormatter()
        dateFormatter.dateFormat = "yyyy-MM-dd"
        let dateString = dateFormatter.string(from: date)
        
        // eventDict에서 해당 날짜의 파일 정보를 가져옴
        if let filePath = eventDict[dateString] {
            // 파일이 있는 경우 이벤트 개수를 1로 설정하여 원형 표시 추가
            return 1
        }
        
        return 0
    }
}

위의 예시에서는 calendar(_:numberOfEventsFor:date:) 메서드를 사용하여 선택한 날짜에 파일이 있는 경우 이벤트 개수를 1로 설정하여 FSCalendar에 원형 표시를 추가합니다.

마무리

FSCalendar를 사용하여 특정 날짜를 선택했을 때 파일을 열 수 있는 기능을 구현하는 방법에 대해 알아보았습니다. 이를 통해 사용자가 앱 내에서 특정 날짜에 연결된 파일을 쉽게 열 수 있게 되었습니다. 위의 코드 예시를 참고하여 원하는 기능을 구현하시기 바랍니다.