因為項目需求盈电,需要做個日歷控件。
之前沒做過杯活,嘗試自己寫寫試試。說寫就寫熬词,開始動手旁钧。。互拾。歪今。
[TOC]
不過寫之前需要先構想怎么寫,想好了才動代碼才能事半功倍颜矿。
首先是打算用到Storyboard和collectionView來做這個日歷控件寄猩。其次需要有個NSDate的類別實現(xiàn)一些日歷要用到的API。
下面開始動手:
NSDate的類別主要用到幾個API:
- 通過年月獲取當月的天數(shù)
+ (NSInteger)numberOfDaysByYear:(NSInteger )year month:
(NSInteger)month; - 通過年月獲取當月第一天是星期幾
+ (NSInteger)firstWeekdayFromYear:(NSInteger)year month:(NSInteger)month;
- 當前年月日骑疆。
StoryBoard中的設置
因為這邊重點不是講storyboard的操作田篇,所以storyboard的具體拉約束的操作不講替废,只講講思路。
-
首先需要一個頭部view顯示泊柬,顯示當前年月和切換上下月椎镣。
-
再者是一個周日到周一的視圖,這里需要7個視圖等分兽赁,也是用autolayout拉約束状答。
-
最后是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;
}
這里講下日歷從周幾開始的實現(xiàn)思路孙咪,其實就是:1. 獲取本月第一天周幾,存為一個類型為NSInteger全局變量firstWeekday巡语;2.獲取本月天數(shù)monthDay翎蹈;3.本月的collectionview需要的item數(shù)為firstweekday+monthday; 4. 最后就是在cellForItemAtIndexPath里面處理一下數(shù)據(jù)即可。
效果:
最后放上demo的github地址男公,有需要的自己拿吧荤堪。
fisland/CalendarDemo · GitHub
這邊文章只是我的學習過程和一點思路分析,希望對有需要的人有一絲幫助枢赔。