因?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地址,有需要的自己拿吧。
這邊文章只是我的學(xué)習(xí)過程和一點(diǎn)思路分析,希望對(duì)有需要的人有一絲幫助。