FSCalendar 'didSelect' - 事件触发太迟?

FSCalendar 'didSelect'-Event fires too late?

希望你到目前为止过得愉快...

我正在尝试使用 FSCalendar 库在 Swift iOS 中构建一个日历应用程序,并且效果很好。现在在字典中我保存了日期和这个日期的匹配数据,所以这就是我现在所说的 post.

中的事件

并且当用户点击与字典中数据匹配的日期时,我尝试在标签中显示数据。 为此,我制作了 appDelegate,如 cocoa pods-FSCalendar 主页中所述...

func calendar(_ calendar: FSCalendar, didDeselect date: Date, at monthPosition: FSCalendarMonthPosition) {

    let dateString = stringFromDate(date as Date)

    print(dateString)
    print(dateprotocol.keys.contains(dateString))

    if(dateprotocol.keys.contains(dateString)){
        calendarlabel.text = dateprotocol[dateString]
    }

}

所以我知道事件不是 100% 相同的,但没有这样的。一个名为 'didSelectDate' 的事件,例如 https://cocoapods.org/pods/FSCalendar,当我手动输入该事件时,该事件不会触发。

否则在我的代码示例中它触发得太晚了,所以当我选择事件所在的日期时,数据将被显示,只有当我 select 我点击带有数据的那个日期后的另一个日期时...任何想法为什么或如何解决这个问题?也许以编程方式调用其他日期?

您似乎是在 didDeselect date 委托函数而不是 didSelect date 中执行此操作。这就解释了为什么事件会在下一个选择时触发 :-)

如果您说 didSelect 函数在您尝试包含它时没有出现在您的建议中,请确保您的 ViewController 是否已确认FSCalendarDelegateFSCalendarDataSource 如下所示, 使用 didSelect 函数 而不是你的函数:

extension YourViewController: FSCalendarDelegate,FSCalendarDataSource {

    func calendar(_ calendar: FSCalendar, didSelect date: Date, at monthPosition: FSCalendarMonthPosition) {
       // Do the same inside this function and you should be fine

       let dateString = stringFromDate(date as Date)

       print(dateString)
       print(dateprotocol.keys.contains(dateString))

       if(dateprotocol.keys.contains(dateString)){
          calendarlabel.text = dateprotocol[dateString]
       }
    }
}

希望对您有所帮助,祝您玩得愉快!