如何使用 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 个不同颜色的点?的主要内容,如果未能解决你的问题,请参考以下文章

如何以编程方式选择日期并在 FSCalendar 上显示

Swift FSCalendar 在表格视图的日历显示事件中选择日期

使用选择日期快速更新 FSCalendar 标头值

如何在 swift 4 中显示 FSCalendar 上的事件点?

如何在 FSCalendar swift 中禁用用户交互?

FSCalendar - 从选定的日期创建 segue 到另一个视图控制器