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单位。
例如smaller为NSDayCalendarUnit,larger为NSMonthCalendarUnit则返回的nsrange的length为date所在的月里共有多少天。
-(NSUInteger)ordinalityOfUnit:(NSCalendarUnit)smaller inUnit:(NSCalendarUnit)larger forDate:(NSDate *)date;
该方法计算date 所在的smaller单位在 date所在的larger单位里的位置,即第几位。
例如smaller为NSDayCalendarUnit,larger为NSMonthCalendarUnit则返回的 nsUInteger为date是date所在的月里的第几天。
-(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下载地址
ios 精简日历的更多相关文章
- IOS自定义日历控件的简单实现(附思想及过程)
因为程序要求要插入一个日历控件,该空间的要求是从当天开始及以后的六个月内的日历,上网查资料基本上都说只要获取两个条件(当月第一天周几和本月一共有多少天)就可以实现一个简单的日历,剩下的靠自己的简单逻辑 ...
- iOS 精简Controlelr代码的两个方法
MVC是苹果推荐使用的iOS APP架构.后来又有MVVM,MVP等架构出现.主要目的是让业务逻辑.展示.数据各个层级解耦.实现最大程度上的代码复用. 对MVC这种架构来说,随着APP中模的增多,控制 ...
- iOS系统日历选择问题
参考:https://blog.csdn.net/lg_sun/article/details/78913064 -(NSString *)getTimeToken{ NSDateFormatter ...
- 关于IOS时间日历的一些注意事项 NSDateFormatter
1.时间或者日期格式化的格式化,在真机上运行的是hi,必须指定是在哪个区域的,不然在真机无法显示 // 1.日期格式化 NSDateFormatter *fmt = [[NSDateFormatter ...
- IOS 时间 日历 处理集合
1.获得当前时间 从1970开始的秒数 NSTimeInterval time = [[NSDate date[ timeIntervalSince1970]]; NSString * str = [ ...
- iOS-----GitHub上比较齐全的iOS 工具和App
Github-iOS 工具 和 App 系统基础库 Category/Util sstoolkit 一套Category类型的库,附带很多自定义控件 功能不错- BFKit 又一套Ca ...
- 开源 iOS 项目分类索引大全 - 待整理
开源 iOS 项目分类索引大全 GitHub 上大概600个开源 iOS 项目的分类和介绍,对于你挑选和使用开源项目应该有帮助 系统基础库 Category/Util sstoolkit 一套Cate ...
- 史上最全的常用iOS的第三方框架
文章来源:http://blog.csdn.net/sky_2016/article/details/45502921 图像: 1.图片浏览控件MWPhotoBrowser 实现了一个照片 ...
- 常用iOS的第三方框架
图像:1.图片浏览控件MWPhotoBrowser 实现了一个照片浏览器类似 iOS 自带的相册应用,可显示来自手机的图片或者是网络图片,可自动从网络下载图片并进行缓存.可对图片进行缩放等 ...
随机推荐
- cocos2d-js 3.0 RC0 监听返回键、菜单键、进入后台(home键)、恢复显示等事件
cc.eventManager.addListener({ event: cc.EventListener.KEYBOARD, onKeyReleased: function(keyCode, eve ...
- python之模块hashlib(提供了常见的摘要算法,如MD5,SHA1等等)
# -*- coding: utf-8 -*- #python 27 #xiaodeng #python之模块hashlib(提供了常见的摘要算法,如MD5,SHA1等等) #http://www.c ...
- 如何使用 MSBuild.exe 生成解决方案中的特定目标
以前都是直接使用VS或者msbuild生成整个解决方案,或者只构建单个工程. 这回使用msbuild构建单个工程的时候出现了问题,因为工程中使用了SolutionDir这个宏来定位第三方库路径. 对于 ...
- 通过#define连接字符串的特殊方法[转]
//在#define中,标准只定义了#和##两种操作.#用来把参数转换成字符串,##则用来连接两个前后两个参数,把它们变成一个字符串. #define Conn(x,y) x##y //连接 ...
- how to Use the Tampermonkey API from the Chrome console
1.Create the following script: // ==UserScript== // @name Exports some GM functions // @namespace Wh ...
- ext4文件系统的delalloc选项造成单次写延迟增加的分析
最近我们的服务进程遇到kill -15后处于Z的状态,变为了僵尸进程,经过/proc/{thread_id}/stack查看其上线程的栈,发现是卡在了fwrite的过程中,而我们的系统中所有文件系统挂 ...
- iOS 获取摄像头当前方向
在做二维码扫描和直播获取视频流的过程中,可能会用到 AVCaptureDevice AVCaptureVideoPreviewLayer AVCaptureSession 这几个参数,其中 1.定义显 ...
- webservice(草稿)
1. 概述 WebService是一种跨编程语言和跨操作系统平台的远程调用技术. Webservice是被定义用来使不同应用之间通过网络传输数据的一种标准,此标准和具体的语言无关,至于哪种语言提供接 ...
- 实现外卖选餐时两级 tableView 联动效果
最近实现了下饿了么中选餐时两级tableView联动效果,先上效果图,大家感受一下: 下面说下具体实现步骤: 首先分解一下,实现这个需求主要是两点,一是点击左边tableView,同时滚动右边tabl ...
- 如何解决 yum安装出现This system is not registered with RHN
[root@localhost ~]# yum install libtool Loaded plugins: rhnplugin, security This system is not regis ...