如何使用 FSCalendar 为日期显示 2 个不同颜色的点?
Posted
技术标签:
【中文标题】如何使用 FSCalendar 为日期显示 2 个不同颜色的点?【英文标题】:How do I show 2 different color dots for a date using FSCalendar? 【发布时间】:2020-07-22 17:26:47 【问题描述】:这里是初级程序员。
如果该日期有负交易和正交易,我会尝试显示两个不同颜色的点。
这是我的代码。它只显示一个点。
func calendar(_ calendar: FSCalendar, numberOfEventsFor date: Date) -> Int
let incomeTransaction = realm.objects(Transaction.self).filter(positiveTransactionPredicate(date: date))
let expenseTransaction = realm.objects(Transaction.self).filter(negativeTransactionPredicate(date: date))
for _ in incomeTransaction
return 1
for _ in expenseTransaction
return 1
return 0
func calendar(_ calendar: FSCalendar, appearance: FSCalendarAppearance, eventDefaultColorsFor date: Date) -> [UIColor]?
let incomeTransaction = realm.objects(Transaction.self).filter(positiveTransactionPredicate(date: date))
let expenseTransaction = realm.objects(Transaction.self).filter(negativeTransactionPredicate(date: date))
for _ in incomeTransaction
return [UIColor(rgb: Constants.green)]
for _ in expenseTransaction
return [UIColor(rgb: Constants.red)]
return nil
这段代码显示了两个点,但它们的颜色相同:
func calendar(_ calendar: FSCalendar, numberOfEventsFor date: Date) -> Int
let incomeTransaction = realm.objects(Transaction.self).filter(positiveTransactionPredicate(date: date))
let expenseTransaction = realm.objects(Transaction.self).filter(negativeTransactionPredicate(date: date))
for _ in incomeTransaction
return 2
for _ in expenseTransaction
return 2
return 0
如何告诉 FSCalendar 委托方法在日期上显示两个不同颜色的点?
像这样:
谢谢。
【问题讨论】:
不清楚您的要求或实际问题是什么。您是在问如何一般显示两个点,或者如何从 Realm 读取数据或执行计算,或者究竟是什么?您能否更新并澄清问题并具体告诉我们问题所在? @jay 我已经更新了这个问题。我只想要一些显示日期的两个不同颜色点的示例代码。如果我能看到如何做到这一点,我应该能够弄清楚一切。谢谢。 【参考方案1】:numberOfEventsForDate:(NSDate *)date;
似乎没有正确实现。您返回 1 导致 1 个点
返回 1 将显示 1 个点,0 将显示 0 个点,2 将显示两个点。来自示例项目
/**
* Asks the dataSource the number of event dots for a specific date.
*
* @see
* - (UIColor *)calendar:(FSCalendar *)calendar appearance:(FSCalendarAppearance *)appearance eventColorForDate:(NSDate *)date;
* - (NSArray *)calendar:(FSCalendar *)calendar appearance:(FSCalendarAppearance *)appearance eventColorsForDate:(NSDate *)date;
*/
- (NSInteger)calendar:(FSCalendar *)calendar numberOfEventsForDate:(NSDate *)date;
我建议查看FSCalendar 的 github 存储库中的示例。
objc的实现是这样的
//return 2 for 2 events
cell.numberOfEvents = [self.dataSourceProxy calendar:self numberOfEventsForDate:date];
如果你总是想要两个点,不管实际事件的数量,只要返回 2
func calendar(_ calendar: FSCalendar, numberOfEventsFor date: Date) -> Int
return 2
下载 Example.swift 项目并查看 FSCalendarSwiftExample.xcodeproj
【讨论】:
感谢您的合作。我了解如何创建两个点。我什至在我原来的问题中提供了一个示例代码如何做到这一点。我的问题不是如何创建两个点,而是如何创建两个不同颜色的点。 我认为您误解了 - 可能是因为我说的不清楚。为每个日期调用委托方法calendar(_ calendar:appearance: FSCalendarAppearance:eventDefaultColorsFor
。如果传入的日期是一个日期,则有一个事件返回您想要的颜色。即如果 1 日和 2 日有事件,请检查传入的日期是否在 dateArray1 中并返回 return [UIColor.blue]
。如果日期在 dateArray2 中,return [UIColor.green]
以及 dataSource 方法 alendar(_ calendar: numberOfEventsFor
表示点数以上是关于如何使用 FSCalendar 为日期显示 2 个不同颜色的点?的主要内容,如果未能解决你的问题,请参考以下文章
Swift FSCalendar 在表格视图的日历显示事件中选择日期