Точки события FSCalendar не отображаются - PullRequest
0 голосов
/ 07 сентября 2018

Я использую FSCalendar для отображения календаря в моем приложении. Сначала я использовал fillDefaultColorFor для отображения событий в цвете так:

    func calendar(_ calendar: FSCalendar, appearance: FSCalendarAppearance, fillDefaultColorFor date: Date) -> UIColor? {
    let dateString2 = self.dateFormatter2.string(from: date)
    //set dates with events to yellow
    if self.datesArray.contains(dateString2){

        return UIColor.yellow
    }
    return nil
}

Но теперь я хочу отображать события, используя точки вместо этого:

 func calendar(_ calendar: FSCalendar, numberOfEventsFor date: Date) -> Int {
   let dateString2 = self.dateFormatter2.string(from: date)

    print("Dates array at numberOfEvents: ", datesArray)
    print("DateString2: ", dateString2)

    //render dots if there is an event on that day
    if self.datesArray.contains(dateString2){
        return 1
    }else{
      return 0
    }

}

Однако приведенный выше код не отображает никаких точек в календаре. Чего-то не хватает в методе numberOfEvents?

РЕДАКТИРОВАТЬ: Для проверки numberOfEvents я добавил массив дат, например:

var testDates = ["2018-09-08", "2018-09-16", "2018-09-20", "2018-09-28"]

Так что numberOfEvents выглядит так:

func calendar(_ calendar: FSCalendar, numberOfEventsFor date: Date) -> Int {

  let dateString = self.dateFormatter2.string(from: date)
  print("datesArray: ", datesArray)// this is in "yyyy-MM-dd" format
  print("Date String: ", dateString)// displays date in "yyyy-MM-dd" format
  print("testDates: ", testDates)

  if self.datesArray.contains(dateString){
    return 1
  }
  if testDates.contains(dateString){
        return 3
  }

  return 0
}

Когда я запускаю приложение, в календаре по-прежнему не отображаются точки событий. Чего-то не хватает в этом коде? Какую функцию я пропустил или неправильно реализовал?

Ответы [ 3 ]

0 голосов
/ 04 октября 2018

Мне удалось решить мою проблему с помощью этого кода:

 func calendar(_ calendar: FSCalendar, willDisplay cell: FSCalendarCell, for date: Date, at monthPosition: FSCalendarMonthPosition) {
    let dateFormatter3 = DateFormatter()
    dateFormatter3.dateFormat = "yyyy-MM-dd"
    let dateString = dateFormatter3.string(from: date)

    //display events as dots
    cell.eventIndicator.isHidden = false
    cell.eventIndicator.color = UIColor.blue

    if self.datesArray.contains(dateString){
        cell.eventIndicator.numberOfEvents = 1
    }
}

Это должно отображать точки событий, если есть события на определенную дату

0 голосов
/ 13 декабря 2018

Вы должны включить FSCalendarDelegateAppearance метод для отображения цветов точек событий и FSCalendarDataSource метод для определения количества событий.

Вот код

Для FSCalendarDelegateAppearance

extension YourController : FSCalendarDelegateAppearance {

// MARK: - FSCalendarDelegateAppearance

func calendar(_ calendar: FSCalendar, appearance: FSCalendarAppearance, eventDefaultColorsFor date: Date) -> [UIColor]? {

    let dateString = date.toString(dateFormat: "yyyy-MM-dd")
    if self.yourDateArr.contains(dateString!) {
        return [UIColor.blue]
    }
    return [UIColor.white]
}
}

Для FSCalendarDataSource

extension YourController : FSCalendarDataSource {

// MARK: - FSCalendarDataSource

func calendar(_ calendar: FSCalendar, numberOfEventsFor date: Date) -> Int {

      let dateString = date.toString(dateFormat: "yyyy-MM-dd")
      if self.yourDateArr.contains(dateString!) {
        return 1
      } 
      return 0
    }
}

Надеюсь, это поможет !!

0 голосов
/ 14 сентября 2018

Пожалуйста, проверьте ваше значение dateArray, также dateArray и формат даты должны совпадать.

Независимо от того, какое событие даты вы хотите показать, эта дата должна быть в dateArray, а также проверить, совпадают ли строки дат в одном формате ( гггг-ММ-дд должно быть ).

...