首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >未显示FSCalendar事件点

未显示FSCalendar事件点
EN

Stack Overflow用户
提问于 2018-09-07 16:55:52
回答 3查看 2.4K关注 0票数 1

我正在使用FSCalendar在我的应用程序中呈现日历。首先,我使用fillDefaultColorFor以如下所示的颜色显示事件:

代码语言:javascript
复制
    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
}

但现在我想使用点来显示事件,而不是使用下面的内容:

代码语言:javascript
复制
 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,我添加了一个日期数组,如下所示:

代码语言:javascript
复制
var testDates = ["2018-09-08", "2018-09-16", "2018-09-20", "2018-09-28"]

所以numberOfEvents看起来像这样:

代码语言:javascript
复制
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
}

当我运行应用程序时,日历中仍然没有显示任何事件点。这段代码中是否遗漏了什么?我遗漏了什么函数,或者没有正确实现?

EN

回答 3

Stack Overflow用户

发布于 2018-12-13 13:03:44

您必须包含FSCalendarDelegateAppearance方法来显示事件点、颜色和FSCalendarDataSource方法来给出事件的数量。

下面是代码

对于FSCalendarDelegateAppearance

代码语言:javascript
复制
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

代码语言:javascript
复制
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
    }
}

希望它能有所帮助!!

票数 2
EN

Stack Overflow用户

发布于 2018-10-04 11:18:42

我设法用下面的代码解决了我的问题:

代码语言:javascript
复制
 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
    }
}

如果在特定日期有事件,则应显示事件点

票数 1
EN

Stack Overflow用户

发布于 2018-09-14 15:29:35

请检查您的datesArray值,dateArray和日期格式也必须相同。

无论您想要显示哪个日期事件,日期必须是datesArray格式,并且还要检查匹配日期字符串的格式是否相同(yyyy-MM-dd必须为)。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/52218935

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档