ios 精简日历_移动开发_编程开发_程序员俱乐部

中国优秀的程序员网站程序员频道CXYCLUB技术地图
热搜:
更多>>
 
您所在的位置: 程序员俱乐部 > 编程开发 > 移动开发 > ios 精简日历

ios 精简日历

 2013/11/23 12:26:43  苹果吧  博客园  我要评论(0)
  • 摘要:网上其他人写的日历类功能都很齐全,比较繁杂,对于想看看日历基础实现然后自己绘制日历的我来说不太方便,就自己整理了一个极精简的日历出来,大家看了之后应该能多少理解日历该怎么自定义,很简单。我的小demo的源码里边有详细的注释http://files.cnblogs.com/ios8/calendar.zip日历类初始化//初始化日历类
  • 标签:iOS

网上其他人写的日历类功能都很齐全,比较繁杂,对于想看看日历基础实现然后自己绘制日历的我来说不太方便,就自己整理了一个极精简的日历出来,大家看了之后应该能多少理解日历该怎么自定义,很简单。

我的小demo的源码  里边有详细的注释 

http://files.cnblogs.com/ios8/calendar.zip

 

日历类初始化

class="s1"> //初始化日历类,并设置日历类的格式是阳历若想设置中国日历设置为NSChineseCalendar

 

    myCalendar = [[NSCalendaralloc]initWithCalendarIdentifier:NSGregorianCalendar];

    //设置每周的第一天从星期几开始 设置为 1周日2周一

    [myCalendarsetFirstWeekday:1];

    //设置每个月或者每年的第一周必须包含的最少天数 设置为1就是第一周至少要有一天

    [myCalendarsetMinimumDaysInFirstWeek:1];

    //设置时区,不设置时区获取月的第一天和星期的第一天的时候可能会提前一天。  这个浪费我了不少时间

    [myCalendarsetTimeZone:[NSTimeZonetimeZoneWithAbbreviation:0]];

 

  日历类里比较重要的三个方法

 

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

     该方法计算date所在的larger单位 里有几个  smaller单位。

     例如smallerNSDayCalendarUnitlargerNSMonthCalendarUnit则返回的nsrangelengthdate所在的月里共有多少天。

     

    -(NSUInteger)ordinalityOfUnit:(NSCalendarUnit)smaller inUnit:(NSCalendarUnit)larger forDate:(NSDate *)date;

    该方法计算date 所在的smaller单位 date所在的larger单位里的位置,即第几位。

     例如smallerNSDayCalendarUnitlargerNSMonthCalendarUnit则返回的 nsUIntegerdatedate所在的月里的第几天。

     

     -(BOOL)rangeOfUnit:(NSCalendarUnit)unit startDate:(NSDate *)datep interval:(NSTimeInterval )tip forDate:(NSDate *)date;

     datep  tip 可计算,则方法返回YES,否则返回NO。当返回YES时,可从datep里得到date所在的 unit单位的第一天。unit可以为 NSMonthCalendarUnit NSWeekCalendarUnit

     

通过使用上边的这三个方法,可以获取到绘制月历所需要的全部数据。以日期2013/11/20为例(我把每个日期格子用button来显示,具体实现见demo):

通过     -(NSRange)rangeOfUnit:(NSCalendarUnit)smaller inUnit:(NSCalendarUnit)larger forDate:(NSDate *)date;可以得到11月共有多少天,知道一共要绘制多少个button。

通过    -(BOOL)rangeOfUnit:(NSCalendarUnit)unit startDate:(NSDate *)datep interval:(NSTimeInterval )tip forDate:(NSDate *)date;可以获取到 11月的第一天是哪一天。

通过     -(NSUInteger)ordinalityOfUnit:(NSCalendarUnit)smaller inUnit:(NSCalendarUnit)larger forDate:(NSDate *)date;   可以得到 11月的第一天 是其所在周的第几天,从而可以知道绘制第一个button的位置。

然后就可以for循环画出11月所有的日期对用的button,用tag加以区分之后就可以实现各种功能了。

 

demo下载地址

点击打开链接

发表评论
用户名: 匿名