1

希望到目前为止你度过了愉快的一天......

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

当用户单击与字典中数据匹配的日期时,我尝试在标签中显示数据。为此,我制作了 appDelegate,就像 cocoa pods-FSCalendar Homepage 上描述的那样......

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% 相同的,但没有这样的。像https://cocoapods.org/pods/FSCalendar上的一个名为“didSelectDate”的事件,当我手动输入该事件时,该事件不会触发。

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

4

1 回答 1

3

似乎您是在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]
       }
    }
}

希望这会有所帮助,祝你好运!

于 2019-09-02T12:23:44.760 回答