用storyboard和collectionView 做個日歷控件

因為項目需求,需要做個日歷控件。
之前沒做過,嘗試自己寫寫試試。說寫就寫,開始動手。。。。
[TOC]
不過寫之前需要先構(gòu)想怎么寫,想好了才動代碼才能事半功倍。
首先是打算用到Storyboard和collectionView來做這個日歷控件。其次需要有個NSDate的類別實現(xiàn)一些日歷要用到的API。

下面開始動手:

NSDate的類別主要用到幾個API:

  1. 通過年月獲取當(dāng)月的天數(shù)
    + (NSInteger)numberOfDaysByYear:(NSInteger )year month:(NSInteger)month;
  2. 通過年月獲取當(dāng)月第一天是星期幾
    + (NSInteger)firstWeekdayFromYear:(NSInteger)year month:(NSInteger)month;
  3. 當(dāng)前年月日。

StoryBoard中的設(shè)置

因為這邊重點不是講storyboard的操作,所以storyboard的具體拉約束的操作不講,只講講思路。

  1. 首先需要一個頭部view顯示,顯示當(dāng)前年月和切換上下月。


  2. 再者是一個周日到周一的視圖,這里需要7個視圖等分,也是用autolayout拉約束。


  3. 最后是collectionView。
    這里需要將collectionView拉進storyboard里,加好約束和設(shè)置好collectionView的layout,因為這里要做的是日歷,item之間,所以我就如下設(shè)置:


min spaceing均為0,而size沒關(guān)系,只是隨便拿個值,具體的size需要在代理方法中設(shè)置,具體代碼如下:

- (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;
}

這里講下日歷從周幾開始的實現(xiàn)思路,其實就是:1. 獲取本月第一天周幾,存為一個類型為NSInteger全局變量firstWeekday;2.獲取本月天數(shù)monthDay;3.本月的collectionview需要的item數(shù)為firstweekday+monthday; 4. 最后就是在cellForItemAtIndexPath里面處理一下數(shù)據(jù)即可。
效果:

最后放上demo的github地址,有需要的自己拿吧。
fisland/CalendarDemo · GitHub
這邊文章只是我的學(xué)習(xí)過程和一點思路分析,希望對有需要的人有一絲幫助。

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容