FSCalendar - отображение доступных дат

swift
ios

#1

Добрый день, всем
Мне необходимо добавить соответствующие выделения для конкретных дней (массив приходит с сервера) в FSCalendar.

Пытаюсь сделать это следующим образом: import UIKit import FSCalendar

class AppointmentCreateThirdVC: UIViewController {
    
    var datesWithEvent = ["2021-02-13", "2021-02-18", "2021-02-08", "2021-02-05"]

    fileprivate lazy var dateFormatter2: DateFormatter = {
        let formatter = DateFormatter()
        formatter.dateFormat = "yyyy-MM-dd"
        return formatter
    }()

    override func viewDidLoad() {
        super.viewDidLoad()

        
    }
    

}

extension AppointmentCreateThirdVC: FSCalendarDataSource, FSCalendarDelegate, FSCalendarDelegateAppearance {
    
    func calendar(_ calendar: FSCalendar, numberOfEventsFor date: Date) -> Int {
        let dateString = self.dateFormatter2.string(from: date)

        if self.datesWithEvent.contains(dateString) {
            print("just one")
            return 1
        }
        
        return 1
    }

// пробовал и так:

    func calendar(_ calendar: FSCalendar, subtitleFor date: Date) -> String? {
        let dateString = self.dateFormatter2.string(from: date)

        if self.datesWithEvent.contains(dateString) {
            return "available"
        }
        
        return ""
    }

// и так:

    func calendar(_ calendar: FSCalendar, appearance: FSCalendarAppearance, fillDefaultColorFor date: Date) -> UIColor? {
        print(date)
        let dateString = self.dateFormatter2.string(from: date)
        if self.datesWithEvent.contains(dateString) {
            return UIColor.blue
        }
        return UIColor.white
    }
}

На календаре пусто - https://i.imgur.com/Zn3COk3.png (хотя я ожидаю, что будут выделения или добавлен сабтайтл)

  1. Подскажите, пожалуйста, что я делаю не так?
  2. Не совсем понимаю, для чего нужна функция numberOfEventsFor. Объясните, пожалуйста.

#2

numberOfEventsFor - указывает сколько точек будет отображаться на конкретный день. У вас в двух случаях возвращается 1, сделайте вместо второй 1 - 0.
Для subTitleFor в случае не нужного дня, возвращайте nil, это уберет лишний отступ между числом и ивентами.
Цвета ивентов (точек) задаются тут eventDefaultColorsFor и eventSelectionColorsFor.
В методах fillDefaultColorFor и fillSelectionColorFor у меня не получилось поменять цвет, я так и не понял где он меняется.

Второй момент, у вашего календаря указан делегат и датасорс к контроллеру?


#3

Да, указан. В сториборде.


#4

Через сториборд я не пробовал, в моем случае все в коде было и у меня subTitle ставится, так же как и title.


#5

Спасибо, теперь разобрался.


#6

Привет! Подскажи, пожалуйста, у меня events сохраняются в Realm, как-то можно передать сохраненное событие в FSCalendar по сохраненной дате? Я потом хочу выводить в таблицу название события и дату по клику на день в календаре. Заранее спасибо)


#7

Можно конечно. Выше, собственно говоря, и есть решение