美文网首页ios学习
用storyboard和collectionView 做个日历控

用storyboard和collectionView 做个日历控

作者: fisland | 来源:发表于2017-06-10 16:19 被阅读12次

    因为项目需求,需要做个日历控件。
    之前没做过,尝试自己写写试试。说写就写,开始动手。。。。
    [TOC]
    不过写之前需要先构想怎么写,想好了才动代码才能事半功倍。
    首先是打算用到Storyboard和collectionView来做这个日历控件。其次需要有个NSDate的类别实现一些日历要用到的API。

    下面开始动手:

    NSDate的类别主要用到几个API:

    1. 通过年月获取当月的天数
      + (NSInteger)numberOfDaysByYear:(NSInteger )year month:(NSInteger)month;
    2. 通过年月获取当月第一天是星期几
      + (NSInteger)firstWeekdayFromYear:(NSInteger)year month:(NSInteger)month;
    3. 当前年月日。

    StoryBoard中的设置

    因为这边重点不是讲storyboard的操作,所以storyboard的具体拉约束的操作不讲,只讲讲思路。

    1. 首先需要一个头部view显示,显示当前年月和切换上下月。


    2. 再者是一个周日到周一的视图,这里需要7个视图等分,也是用autolayout拉约束。


    3. 最后是collectionView。
      这里需要将collectionView拉进storyboard里,加好约束和设置好collectionView的layout,因为这里要做的是日历,item之间,所以我就如下设置:


    min spaceing均为0,而size没关系,只是随便拿个值,具体的size需要在代理方法中设置,具体代码如下:

    - (CGSize)collectionView:(UICollectionView *)collectionView layout:(UICollectionViewLayout*)collectionViewLayout sizeForItemAtIndexPath:(NSIndexPath *)indexPath
    {
    CGFloat width =  collectionView.frame.size.width;
    CGFloat cellWidth = (width - 20) / 7.0;
    CGSize size = CGSizeMake(cellWidth, 40);
    return size;
    }
    

    这里讲下日历从周几开始的实现思路,其实就是:1. 获取本月第一天周几,存为一个类型为NSInteger全局变量firstWeekday;2.获取本月天数monthDay;3.本月的collectionview需要的item数为firstweekday+monthday; 4. 最后就是在cellForItemAtIndexPath里面处理一下数据即可。
    效果:

    最后放上demo的github地址,有需要的自己拿吧。
    fisland/CalendarDemo · GitHub
    这边文章只是我的学习过程和一点思路分析,希望对有需要的人有一丝帮助。

    相关文章

      网友评论

        本文标题:用storyboard和collectionView 做个日历控

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