自定义简单日历控件

最近在做一个蓝牙项目中需要用到日历,从网上浏览第三方的日历控件都不能满足需求,于是就考虑自定日历控件来满足需求。日历效果如下

自定义简单日历控件_第1张图片

要解决问题?

1.判断当前的日期是星期几

2.判断当前的这个月有多少天(还得判断当前的年是否闰年)

3.怎么获取下个月和上个月(有跨年的情况)

问题一: 好像是无从下手,但是查阅相关资料,苹果提供了相关的类来解决。 具体实现如下:

//输入日期输出星期几

- (NSString*)weekdayStringFromDate:(NSDate*)inputDate {

NSArray*weekdays = [NSArrayarrayWithObjects: [NSNullnull],@"星期天",@"星期一",@"星期二",@"星期三",@"星期四",@"星期五",@"星期六",nil];

NSCalendar*calendar = [[NSCalendaralloc]initWithCalendarIdentifier:NSCalendarIdentifierGregorian];

NSTimeZone*timeZone = [[NSTimeZonealloc]initWithName:@"Asia/Shanghai"];

[calendarsetTimeZone: timeZone];

NSCalendarUnitcalendarUnit =NSCalendarUnitWeekday;

NSDateComponents*theComponents = [calendarcomponents:calendarUnitfromDate:inputDate];

return[weekdaysobjectAtIndex:theComponents.weekday];

}

其中weekdays可以自定义,可以填写一、二、三等等,根据具体的情况修改。

问题二:判断一个月有多天不难,最笨的方法直接用条件语句来判断输出这个月有多少天,但需要注意的是必须判断当前的年是否是闰年,这里提供另外一种方法来解决。同样还是利用苹果提供的类来实现。具体的方案如下:

//输入日期输出当月的天数

- (NSInteger)dayIntegerFromDate:(NSDate*)inputDate {

NSCalendar*calendar = [NSCalendarcurrentCalendar];

NSRangerange = [calendarrangeOfUnit:NSCalendarUnitDayinUnit:NSCalendarUnitMonthforDate:inputDate];

returnrange.length;

}

问题三:其实要解决这个问题并不难,最直接的方案就是推算,不过在推算的过程中需要注意跨年的情况。另一种方案是利用苹果提供的类来解决是最简单的,具体的实现如下:

//输入日期输出上个月日期

- (NSDate*)lastMonth:(NSDate*)date{

NSDateComponents*dateComponents = [[NSDateComponentsalloc]init];

dateComponents.month= -1;

NSDate*newDate = [[NSCalendarcurrentCalendar]dateByAddingComponents:dateComponentstoDate:dateoptions:0];

returnnewDate;

}

// //输入日期输出下个月日期

- (NSDate*)nextMonth:(NSDate*)date{

NSDateComponents*dateComponents = [[NSDateComponentsalloc]init];

dateComponents.month= +1;

NSDate*newDate = [[NSCalendarcurrentCalendar]dateByAddingComponents:dateComponentstoDate:dateoptions:0];

returnnewDate;

}

到此难点完全解决。效果图如下:


自定义简单日历控件_第2张图片

最后附上完整的文件,控件还要不断的优化,有设计不合理的地方请多多包含。

https://pan.baidu.com/s/1dEAWzlR

你可能感兴趣的:(自定义简单日历控件)