美文网首页
iOS:NSCalender简易日历

iOS:NSCalender简易日历

作者: 静谧的橘子 | 来源:发表于2017-10-25 08:47 被阅读25次

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

    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

    相关文章

      网友评论

          本文标题:iOS:NSCalender简易日历

          本文链接:https://www.haomeiwen.com/subject/aiifpxtx.html