FSCalendar的事件点不会出现

时间:2017-09-17 19:39:06

标签: ios swift fscalendar

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()

1 个答案:

答案 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() }