Перезагрузить вид FSCalendar - PullRequest
1 голос
/ 18 января 2020

В настоящее время у меня есть простое приложение календаря, использующее FSCalendar, и я хочу отображать событие для каждого дня, которое соответствует массиву дат. Когда представление загружено, оно показывает события должным образом на основе того, что находится в массиве. После добавления новой даты я проверяю, что массив добавил новую дату, устанавливая точку останова, и в конце я вызываю функцию calendar.reloadData().

ViewController.swift

class ViewController: UIViewController {

    let calendarA = FSCalendar()
    var calendarDaysEvent: [String] = []



    // Result with the events of the selected day
    var dayEvents: Results<EventsCompleted>?

    override func viewDidLoad() {
        super.viewDidLoad()


        //.../

        calendarA.dataSource = self
        calendarA.delegate = self


        self.calendarA.reloadData()
        loadEventsCompleted()
        loadEventsPerDay()

    }


    @IBAction func addItem(_ sender: UIButton) {
       // Adds new item to the database
    }


    func randomHexColor() -> String {
        // get the hex color
    }

    func hexStringToUIColor (hex:String) -> UIColor {
        // hexColor to UI
    }

    func loadEventsCompleted() {
        dayEvents = realm.objects(EventsCompleted.self)
        eventsTableView.reloadData()
    }

    func loadEventsPerDay(){
        // calendarDays
        let id = dayEvents?.count ?? 0
        if id != 0 {
            print("ID: \(id)")
            for x in 1...id {
                calendarDaysEvent.append(dayEvents![x-1].date)
            }

            calendarA.reloadData() // Although I call it here, it is not called
            // All the database functions for those things work normally
        } else {
            print("No events on the calendar")
        }

    }
}

Расширение для FSCalendar

Функция numberOfEventsFor вызывается ТОЛЬКО при вызове функции onViewDidLoad.

extension ViewController: FSCalendarDelegate, FSCalendarDataSource {
    func calendar(_ calendar: FSCalendar, didSelect date: Date, at monthPosition: FSCalendarMonthPosition) {
        print("Selected \(date)") //2020-01-15 23:00:00 +0000
        print("Formatted date: \(date.toDateString(dateFormat: "yyyy-MM-dd"))")
    }

    func calendar(_ calendar: FSCalendar, numberOfEventsFor date: Date) -> Int {
        if calendarDaysEvent.count != 0 {
            if calendarDaysEvent.contains(date.toDateString(dateFormat: "yyyy-MM-dd")) {
                return 1
            } else {
                return 0
            }
        } else {
            return 0
        }

    }
}

Когда я устанавливаю точку останова только для return 1 функции numberOfEventsFor, она никогда не срабатывает. Я попытался выяснить, как работает reloadData, и похоже, что он воссоздает представление, что означает, что он также должен перезагрузить события. Я не уверен, что делаю что-то не так, вызывая функцию reloadData из расширения.

Я удалил некоторую часть кода, которая, по моему мнению, не имеет отношения к делу, но если вы считаете, что это может помочь в создании дополнительного контекста, я могу добавить его сюда.

1 Ответ

2 голосов
/ 18 января 2020

Так что это была глупая проблема. Причина, по которой обновление состояния календаря не сработало, заключается в том, что я не создал выход для календаря.

...