swift - FSCalendar 事件点未显示

标签 swift xcode fscalendar

我正在使用 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
}

当我运行应用程序时,日历中仍然没有显示事件点。这段代码中是否缺少某些内容?我错过了某些功能或错误地实现了某些功能?

最佳答案

您必须包含 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
    }
}

希望对你有帮助!!

关于swift - FSCalendar 事件点未显示,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52218935/

相关文章:

'for' 循环的 Swift 编译器优化

iphone - 为什么我的常规点击会被识别为 LongPresses?

ios - 月份标题没有向左移动 FSCALENDAR

ios - 在 FSCalendar 中显示来自 API 的事件

swift - Promise.onSuccess 立即调用

swift - Swift 中的 Java "equals"等价物

Swift 3 嵌套通用编译器崩溃

ios - Xcode,iOS,“停止”(null)“,”“(null)”的实例已在运行中……”

ios - Xcode (9.3) 中未命中断点

iOS - Swift - FSCalendar 日期名称和日期数字之间的奇怪空格