重新加载 FSCalendar 的视图
Reload View of FSCalendar
目前我有一个使用 FSCalendar
的简单日历应用程序,我想显示与日期数组匹配的每一天的事件。加载视图时,它会根据数组中的内容正确显示事件。添加新日期后,我通过设置断点验证数组是否添加了新日期,最后调用 calendar.reloadData()
函数。
ViewController.swift
class ViewController: UIViewController {
let calendarA = FSCalendar()
var calendarDaysEvent: [String] = []
// Result with the events of the selected day
var dayEvents: Results<EventsCompleted>?
override func viewDidLoad() {
super.viewDidLoad()
//.../
calendarA.dataSource = self
calendarA.delegate = self
self.calendarA.reloadData()
loadEventsCompleted()
loadEventsPerDay()
}
@IBAction func addItem(_ sender: UIButton) {
// Adds new item to the database
}
func randomHexColor() -> String {
// get the hex color
}
func hexStringToUIColor (hex:String) -> UIColor {
// hexColor to UI
}
func loadEventsCompleted() {
dayEvents = realm.objects(EventsCompleted.self)
eventsTableView.reloadData()
}
func loadEventsPerDay(){
// calendarDays
let id = dayEvents?.count ?? 0
if id != 0 {
print("ID: \(id)")
for x in 1...id {
calendarDaysEvent.append(dayEvents![x-1].date)
}
calendarA.reloadData() // Although I call it here, it is not called
// All the database functions for those things work normally
} else {
print("No events on the calendar")
}
}
}
FSCalendar 的扩展
只有在调用 onViewDidLoad 函数时才会调用 numberOfEventsFor
函数。
extension ViewController: FSCalendarDelegate, FSCalendarDataSource {
func calendar(_ calendar: FSCalendar, didSelect date: Date, at monthPosition: FSCalendarMonthPosition) {
print("Selected \(date)") //2020-01-15 23:00:00 +0000
print("Formatted date: \(date.toDateString(dateFormat: "yyyy-MM-dd"))")
}
func calendar(_ calendar: FSCalendar, numberOfEventsFor date: Date) -> Int {
if calendarDaysEvent.count != 0 {
if calendarDaysEvent.contains(date.toDateString(dateFormat: "yyyy-MM-dd")) {
return 1
} else {
return 0
}
} else {
return 0
}
}
}
当我在 numberOfEventsFor
函数的唯一 return 1
情况下设置断点时,它永远不会触发。我试图找到 reloadData 的工作原理,它看起来像是重新创建了视图,这意味着它也应该重新加载事件。我不确定我是否在调用来自扩展的 reloadData 函数时做错了什么。
我删除了一些我认为不相关的代码部分,但如果您认为它可以帮助提供更多上下文,我可以在此处添加它。
所以这是一个愚蠢的问题。日历状态更新不起作用的原因是因为我没有创建日历的出口。
目前我有一个使用 FSCalendar
的简单日历应用程序,我想显示与日期数组匹配的每一天的事件。加载视图时,它会根据数组中的内容正确显示事件。添加新日期后,我通过设置断点验证数组是否添加了新日期,最后调用 calendar.reloadData()
函数。
ViewController.swift
class ViewController: UIViewController {
let calendarA = FSCalendar()
var calendarDaysEvent: [String] = []
// Result with the events of the selected day
var dayEvents: Results<EventsCompleted>?
override func viewDidLoad() {
super.viewDidLoad()
//.../
calendarA.dataSource = self
calendarA.delegate = self
self.calendarA.reloadData()
loadEventsCompleted()
loadEventsPerDay()
}
@IBAction func addItem(_ sender: UIButton) {
// Adds new item to the database
}
func randomHexColor() -> String {
// get the hex color
}
func hexStringToUIColor (hex:String) -> UIColor {
// hexColor to UI
}
func loadEventsCompleted() {
dayEvents = realm.objects(EventsCompleted.self)
eventsTableView.reloadData()
}
func loadEventsPerDay(){
// calendarDays
let id = dayEvents?.count ?? 0
if id != 0 {
print("ID: \(id)")
for x in 1...id {
calendarDaysEvent.append(dayEvents![x-1].date)
}
calendarA.reloadData() // Although I call it here, it is not called
// All the database functions for those things work normally
} else {
print("No events on the calendar")
}
}
}
FSCalendar 的扩展
只有在调用 onViewDidLoad 函数时才会调用 numberOfEventsFor
函数。
extension ViewController: FSCalendarDelegate, FSCalendarDataSource {
func calendar(_ calendar: FSCalendar, didSelect date: Date, at monthPosition: FSCalendarMonthPosition) {
print("Selected \(date)") //2020-01-15 23:00:00 +0000
print("Formatted date: \(date.toDateString(dateFormat: "yyyy-MM-dd"))")
}
func calendar(_ calendar: FSCalendar, numberOfEventsFor date: Date) -> Int {
if calendarDaysEvent.count != 0 {
if calendarDaysEvent.contains(date.toDateString(dateFormat: "yyyy-MM-dd")) {
return 1
} else {
return 0
}
} else {
return 0
}
}
}
当我在 numberOfEventsFor
函数的唯一 return 1
情况下设置断点时,它永远不会触发。我试图找到 reloadData 的工作原理,它看起来像是重新创建了视图,这意味着它也应该重新加载事件。我不确定我是否在调用来自扩展的 reloadData 函数时做错了什么。
我删除了一些我认为不相关的代码部分,但如果您认为它可以帮助提供更多上下文,我可以在此处添加它。
所以这是一个愚蠢的问题。日历状态更新不起作用的原因是因为我没有创建日历的出口。