zoukankan      html  css  js  c++  java
  • ios 精简日历

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

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

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

    日历类初始化

     //初始化日历类,并设置日历类的格式是阳历若想设置中国日历设置为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下载地址

    点击打开链接

  • 相关阅读:
    Leetcode字符串算法
    Leetcode基础算法结构-目录结构
    python日志-loguru日志管理
    FastApi
    python-hashlib
    excel数据操作
    yagmail自动发邮件
    python-sys
    集合
    文件操作
  • 原文地址:https://www.cnblogs.com/ios8/p/ios-Calendar.html
Copyright © 2011-2022 走看看