首页 > 解决方案 > 如何使用 FSCalendar 为日期显示 2 个不同颜色的点?

问题描述

初级程序员在这里。

如果该日期有负交易和正交易,我会尝试显示两个不同颜色的点。

这是我的代码。它只显示一个点。

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 委托方法在日期上显示两个不同颜色的点?

像这样:

两个不同的点

谢谢。

标签: swiftrealmnspredicatefscalendar

解决方案


似乎没有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


推荐阅读