我正在使用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
}当我运行应用程序时,日历中仍然没有显示任何事件点。这段代码中是否遗漏了什么?我遗漏了什么函数,或者没有正确实现?
发布于 2018-12-13 13:03:44
您必须包含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
}
}希望它能有所帮助!!
发布于 2018-10-04 11:18:42
我设法用下面的代码解决了我的问题:
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
}
}如果在特定日期有事件,则应显示事件点
发布于 2018-09-14 15:29:35
请检查您的datesArray值,dateArray和日期格式也必须相同。
无论您想要显示哪个日期事件,日期必须是datesArray格式,并且还要检查匹配日期字符串的格式是否相同(yyyy-MM-dd必须为)。
https://stackoverflow.com/questions/52218935
复制相似问题