一步步学习ios

iOS:NSCalender简易日历

2017-05-31  本文已影响0人  静谧的桔子

近来项目中需要自定义日历,研究了一下,趁着这段时间不忙,写一个简单的教程,基本能满足的要求。

NSCalender

苹果官方解释为:NSCalendar对象封装了关于计算时间系统的信息,其中定义了一年的开始、长度和划分。它们提供关于日历的信息和对calendrical计算的支持,例如确定给定的calendrical单元的范围,并在给定的绝对时间内添加单元。

由此可以看出NSCalender的强大之处,废话不多说,直接进入正题。


先说一下思路,我写的主要是为了让人能理解主要功能,所以尽量简化了,我把整个日历分为上、下两部分,上部分是日期的展示、以及月份的增加跟减少,下部分是日历的内容,主要讲下部分。

下部分分为UICollectionView + NSCalender,也就是展示 + 数据。

1.获取一个NSCalender对象

[NSCalendar currentCalendar];

currentCalendar取得的值会一直保持在cache中,第一次取得以后如果用户修改该系统日历设定,这个值也不会改变。

firstWeekday

设定每周的第一天从星期几开始,比如:

如需设定从星期日开始,则value传入1

如需设定从星期一开始,则value传入2

minimumDaysInFirstWeek

设定作为(每年及每月)第一周必须包含的最少天数,比如:

如需设定第一周最少包括1天,则value传入1

2.获取当前月有多少天:

- (NSRange)rangeOfUnit:(NSCalendarUnit)smaller inUnit:(NSCalendarUnit)larger forDate:(NSDate *)date;

官方解释为返回一个更小的日历单元(比如一天)的绝对时间值的范围,它可以在一个更大的日历单元(例如一个月)中进行,其中包括指定的绝对时间。

3.得到这个月的第一天是星期几:


先将self.calender转换成NSDateComponents,再将之前的日期年、月赋值给新的NSDateComponents对象,最主要的是要将day设置为1,之后再进行转换,获取月初第一天是星期几。

因为我之前设置firstWeekday的月初是星期一,所以在W=7的时候,月初是星期天,需要设置为0,是为了跟UICollectionView显示的时候相对应。

4.改变月份

通过改变月份就可以做到时间的日历的切换了。

基本上一个日历的主要功能就写完了,还有其他的一些需求可以自行翻阅文档查看。

demo地址:github.com/cxorange/Calender.git 

上一篇下一篇

猜你喜欢

热点阅读