FSCalendar使用

FSCalendar使用

在项目中经常有使用到日历,大部分使用场景都需要自定义日历,FSCalendar能适应大部分场景

参考如下的使用文档:

FSCalendar大概由如下的几部分组成:
组成
组成

  • FSCalendarHeaderTouchDeliver - 为FSCalendarHeaderViewFSCalendarWeekdayView组合成的部分

外观定制

Scope

scope分为month和week,通过scope来设置

typedef NS_ENUM(NSUInteger, FSCalendarScope) { //范围
    FSCalendarScopeMonth,
    FSCalendarScopeWeek
};
@property (assign, nonatomic) FSCalendarScope scope;

改变scope后,会触发内在的frame发生变化,可在如下方法中做出调整:

- (void)calendar:(FSCalendar *)calendar boundingRectWillChange:(CGRect)bounds animated:(BOOL)animated;

例如,通过如下的代码做出动态的调节:

- (IBAction)toggleClicked:(id)sender
{
    if (self.calendar.scope == FSCalendarScopeMonth) {
        [self.calendar setScope:FSCalendarScopeWeek animated:_animationSwitch.on];
    } else {
        [self.calendar setScope:FSCalendarScopeMonth animated:_animationSwitch.on];
    }
}

scope调整

placeholderType

typedef NS_ENUM(NSUInteger, FSCalendarPlaceholderType) {
    FSCalendarPlaceholderTypeNone          = 0,
    FSCalendarPlaceholderTypeFillHeadTail  = 1, //填满头部和尾部
    FSCalendarPlaceholderTypeFillSixRows   = 2 //6行
};

FSCalendarPlaceholderTypeFillSixRows
FSCalendarPlaceholderTypeFillSixRows
FSCalendarPlaceholderTypeFillHeadTail
FSCalendarPlaceholderTypeFillHeadTail

FSCalendarPlaceholderTypeNone
FSCalendarPlaceholderTypeNone

中文

calendar.locale = [NSLocale localeWithLocaleIdentifier:@"zh_cn"];//中文

设置caseOptions

calendarappearance属性为FSCalendarAppearance类型,其有个caseOptions属性
如果设置为如下的属性:

calendar.appearance.caseOptions = FSCalendarCaseOptionsHeaderUsesUpperCase|FSCalendarCaseOptionsWeekdayUsesUpperCase;

显示效果
如果设置为

calendar.appearance.caseOptions = FSCalendarCaseOptionsHeaderUsesUpperCase|FSCalendarCaseOptionsWeekdayUsesSingleUpperCase;

显示效果

颜色

颜色可通过appearance相关的属性来设置,也可通过代理来实现

FSCalendarAppearance

颜色
FSCalendarDelegateAppearance

@protocol FSCalendarDelegateAppearance <FSCalendarDelegate>

颜色

字体

font

单元格中的字体大小默认是自适应的,需要先关闭自适应。否则字体尺寸不会发生改变。

calendar.appearance.adjustsFontSizeToFitContentSize = NO; // 关闭文字尺寸自适应

背景、边框、事件圆点

同样可以通过属性和代理来设置

FSCalendarAppearance

背景、边框、事件圆点
FSCalendarDelegateAppearance

背景、边框、事件圆点

圆角

默认情况下today和选中的标识都是圆圈

圆角
通过calendar.appearance.borderRadius = 0,可设置为方形

方形

其它设置

firstWeekday

通过firstWeekday属性可以设置calendar的第一天是星期几,如果设置2,则表示第一个是Mon星期一

scrollDirection

scrollDirection设置滚动的方向,可选值如下:

typedef NS_ENUM(NSUInteger, FSCalendarScrollDirection) {//滚动方向
    FSCalendarScrollDirectionVertical,
    FSCalendarScrollDirectionHorizontal
};

设置不显示today的圆圈

默认情况下,today的显示效果类似如下:

today显示效果
如果设置self.calendar.today = nil;,则显示效果如下:

不显示today效果

设置日期范围

// FSCalendarDataSource
- (NSDate *)minimumDateForCalendar:(FSCalendar *)calendar
{
    return yourMinimumDate;
}

- (NSDate *)maximumDateForCalendar:(FSCalendar *)calendar
{
    return yourMaximumDate;
}

设置日期可以使用如下的方法:

self.gregorian = [NSCalendar calendarWithIdentifier:NSCalendarIdentifierGregorian];
......
- (NSDate *)maximumDateForCalendar:(FSCalendar *)calendar
{
    return [self.gregorian dateByAddingUnit:NSCalendarUnitMonth value:5 toDate:[NSDate date] options:0];
}

FSCalendarCell

FSCalendarCell大概由如下的几个部分组成:

  • titleLabel - 显示日期
  • subtitleLabel - 显示副标题
  • shapeLayer - 表示标识
  • imageView
  • FSCalendarEventIndicator - 表示事件event的view

FSCalendarCell

可继承FSCalendarCell,自定义cell,达到自定义UI的目的
先注册,再使用

[calendar registerClass:[DIYCalendarCell class] forCellReuseIdentifier:@"cell"];

- (FSCalendarCell *)calendar:(FSCalendar *)calendar cellForDate:(NSDate *)date atMonthPosition:(FSCalendarMonthPosition)monthPosition
{
    DIYCalendarCell *cell = [calendar dequeueReusableCellWithIdentifier:@"cell" forDate:date atMonthPosition:monthPosition];
    return cell;
}
相关推荐
©️2020 CSDN 皮肤主题: 程序猿惹谁了 设计师:白松林 返回首页