用storyboard和collectionView 做個(gè)日歷控件

因?yàn)轫?xiàng)目需求,需要做個(gè)日歷控件。

之前沒做過,嘗試自己寫寫試試。說寫就寫,開始動(dòng)手。。。。


不過寫之前需要先構(gòu)想怎么寫,想好了才動(dòng)代碼才能事半功倍。

首先是打算用到Storyboard和collectionView來做這個(gè)日歷控件。其次需要有個(gè)NSDate的類別實(shí)現(xiàn)一些日歷要用到的API。


下面開始動(dòng)手:

1. NSDate的類別主要用到幾個(gè)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)前年月日。


2. StoryBoard中的設(shè)置

因?yàn)檫@邊重點(diǎn)不是講storyboard的操作,所以storyboard的具體拉約束的操作不講,只講講思路。

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

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


3)最后是collectionView。

這里需要將collectionView拉進(jìn)storyboard里,加好約束和設(shè)置好collectionView的layout,因?yàn)檫@里要做的是日歷,item之間,所以我就如下設(shè)置:


min spaceing均為0,而size沒關(guān)系,只是隨便拿個(gè)值,具體的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;

}

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

效果:


最后放上demo的github地址,有需要的自己拿吧。

fisland/CalendarDemo · GitHub

這邊文章只是我的學(xué)習(xí)過程和一點(diǎn)思路分析,希望對(duì)有需要的人有一絲幫助。

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

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

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