FSCalendar的事件点不会出现。直到我滑到下一个月或上个月,事件点都没有出现。我使用calendar.reloadData()这里是我的代码:
object(stdClass)#1 (5) {
["a"] => int(1)
["b"] => int(2)
["c"] => int(3)
["d"] => int(4)
["e"] => int(5)
}
array(5) {
["a"] => int(1)
["b"] => int(2)
["c"] => int(3)
["d"] => int(4)
["e"] => int(5)
}
我也在viewDidLoad()中使用calendar.reloadData():
func calendar(_ calendar: FSCalendar, numberOfEventsFor date: Date) -> Int {
let dateFormatter = DateFormatter()
dateFormatter.dateFormat = "yyyy/MM/dd"
dateFormatter.locale = Locale.init(identifier: "fa_IR")
for dateStr in dates{
if(dateFormatter.string(from: date) == dateStr)
{
return 1
self.calendar.reloadData()
}
}
return 0
}
所以我做错了什么? 我也尝试将我的逻辑放在显示单元中,但这也没有用。 这是整个视图控制器:
super.viewDidLoad()
self.calendar.firstWeekday = 7
self.calendar.locale = Locale(identifier: "fa_IR")
self.calendar.select(Date())
self.calendar.identifier = NSCalendar.Identifier.persian.rawValue
self.calendar.reloadData()
答案 0 :(得分:0)
尝试在numberOfEvents
方法中返回0,并在willDisplayCell
以下内容应在willDisplayCell
cell.eventIndicator.numberOfEvents = 1
cell.eventIndicator.isHidden = false
cell.eventIndicator.color = UIColor.green
此方法和numberOfEventsForDate
代价高昂。为了提高效率,您可以通过按升序对日期数据源进行排序来限制代码执行次数,并且只有在最小和最大日期范围内时才执行上述代码。您可以使用numberOfEventsForDate
方法实现相同的目的,但在这里您可以直接处理单元格的属性。
修改强>
在您的更新代码中,您似乎没有在self.calendar
中重新加载viewDidLoad
。您只是重新加载了self.tblCalendar
。
添加self.calendar.reloadData()
。它应该工作。如果没有,请尝试在主线程中添加日历重新加载:
DispatchQueue.main.async { self.calendar.reloadData() }