一個簡單的日歷選擇控件

不啰嗦,直接上思路

時間選擇就不說了,界面固定的金度,說說日期選擇应媚。
日期選擇其實就是一個collectionView,collectionView的item數(shù)量猜极,取決與日歷的開始日期與結(jié)束日期中姜。

假設(shè)開始日期為1970-01-01,結(jié)束日期為當前日期
那item的數(shù)量 = 當前日期與開始日期相差的天數(shù) + 1 + 4(1970-01-01是星期四)跟伏,為什么要+1丢胚,自己領(lǐng)悟,如圖

接下來就是cell的賦值受扳,其實這個也是非常簡單的携龟,代碼如下,開始日期是星期幾就從第幾個cell開始賦值(星期日是第0個)勘高。開始日期+indexPath.item - 開始日期的星期峡蟋,就能得到該cell對應的日期,然后將日期中的多少號顯示在cell上就行了华望,如果是1號蕊蝗,就把月份也顯示出來

if (indexPath.item >= _firstWeekday) {
   item.date = [DateTool date:self.startDate addDays:indexPath.item - _firstWeekday];
} else {
   item.date = nil;
}

cell中的代碼

- (void)setDate:(NSDate *)date {
    _date = date;
    if (!date) {
        _monthLabel.text = @"";
        _dayLabel.text = @"";
        return;
    }

    NSDateComponents *components = [[NSCalendar currentCalendar] components:NSCalendarUnitYear | NSCalendarUnitMonth | NSCalendarUnitDay fromDate:date];
    if (components.day == 1 || [[NSCalendar currentCalendar] isDateInToday:date]) {
        _monthLabel.text = [NSString stringWithFormat:@"%@", self.months[components.month - 1]];
     } else {
        _monthLabel.text = @"";
    }

    _dayLabel.text = [NSString stringWithFormat:@"%ld", components.day];
}

上面說的這些都挺簡單的,接下來說說下面這個功能的實現(xiàn)赖舟,如圖


滾動collectionView的時候匿又,上面會出現(xiàn)對應的年份與月份,筆者的做法是建蹄,collectionView上面疊加了一個tableview,滾動collectionView的同時裕偿,同步滾動tableview洞慎。

這里的難點就在于同步,如何保證tableview上的日期與collectionView上的日期正好對應上嘿棘,進一步說劲腿,難點在于tableviewCell高度的計算,把tableviewCell的高度計算對了鸟妙,剩下的就簡單了

Cell高度的計算

其實在做之前焦人,筆者也覺得這個高度的計算一定很難,但是有了思路之后重父,發(fā)覺還是非常簡單的花椭,只要你不是數(shù)學白癡,就能看懂

以下面的圖為例:


我們先看第一個cell房午,這個cell的高度為collectionView中3個item的高度矿辽。
這個3是怎么算出來的?很簡單,開始日期我們知道袋倔,那我們就可以取出開始月份的最后一天雕蔽,這里是1974-11-30,然后我們計算出這個日期與開始日期相差的天數(shù) + 1 + 6(開始日期是周六)宾娜,然后(天數(shù) + 6)/ 7批狐,取整就可以得到3了,不要問我為什么+6前塔。

第二個cell高度的計算也類似嚣艇,不過這需要依賴第一個cell的高度,我們在開始日期的基礎(chǔ)上+1個月嘱根,取出這個月最后一天的日期并計算與開始日期相差的天數(shù)髓废,然后算出總高度,再用這個高度減去上一個cell的高度该抒,就可以得到第二個cell的高度了慌洪。

后面的以此類推,最后一個略有不同凑保,最后一個月不能取最后一天的日期冈爹,而是要取結(jié)束日期

這樣計算出來的cell的總高度最終與collectionView的contentSize.height是一樣的,所以要保證同步欧引,只需要在滾動collectionView的時候频伤,設(shè)置tableview的垂直偏移量與collectionView的一致就行了

結(jié)束語

表達的可能不是很清楚,有興趣研究的可以到筆者的github下載

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末芝此,一起剝皮案震驚了整個濱河市憋肖,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌婚苹,老刑警劉巖岸更,帶你破解...
    沈念sama閱讀 218,122評論 6 505
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場離奇詭異膊升,居然都是意外死亡怎炊,警方通過查閱死者的電腦和手機,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 93,070評論 3 395
  • 文/潘曉璐 我一進店門廓译,熙熙樓的掌柜王于貴愁眉苦臉地迎上來评肆,“玉大人,你說我怎么就攤上這事非区」贤欤” “怎么了?”我有些...
    開封第一講書人閱讀 164,491評論 0 354
  • 文/不壞的土叔 我叫張陵院仿,是天一觀的道長秸抚。 經(jīng)常有香客問我速和,道長剥汤,這世上最難降的妖魔是什么颠放? 我笑而不...
    開封第一講書人閱讀 58,636評論 1 293
  • 正文 為了忘掉前任,我火速辦了婚禮吭敢,結(jié)果婚禮上碰凶,老公的妹妹穿的比我還像新娘。我一直安慰自己鹿驼,他們只是感情好欲低,可當我...
    茶點故事閱讀 67,676評論 6 392
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著畜晰,像睡著了一般砾莱。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上凄鼻,一...
    開封第一講書人閱讀 51,541評論 1 305
  • 那天腊瑟,我揣著相機與錄音,去河邊找鬼块蚌。 笑死闰非,一個胖子當著我的面吹牛,可吹牛的內(nèi)容都是我干的峭范。 我是一名探鬼主播财松,決...
    沈念sama閱讀 40,292評論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼纱控!你這毒婦竟也來了辆毡?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 39,211評論 0 276
  • 序言:老撾萬榮一對情侶失蹤甜害,失蹤者是張志新(化名)和其女友劉穎胚迫,沒想到半個月后,有當?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體唾那,經(jīng)...
    沈念sama閱讀 45,655評論 1 314
  • 正文 獨居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 37,846評論 3 336
  • 正文 我和宋清朗相戀三年褪尝,在試婚紗的時候發(fā)現(xiàn)自己被綠了闹获。 大學時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點故事閱讀 39,965評論 1 348
  • 序言:一個原本活蹦亂跳的男人離奇死亡河哑,死狀恐怖避诽,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情璃谨,我是刑警寧澤沙庐,帶...
    沈念sama閱讀 35,684評論 5 347
  • 正文 年R本政府宣布鲤妥,位于F島的核電站,受9級特大地震影響拱雏,放射性物質(zhì)發(fā)生泄漏棉安。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點故事閱讀 41,295評論 3 329
  • 文/蒙蒙 一铸抑、第九天 我趴在偏房一處隱蔽的房頂上張望贡耽。 院中可真熱鬧,春花似錦鹊汛、人聲如沸蒲赂。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,894評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽滥嘴。三九已至,卻和暖如春至耻,著一層夾襖步出監(jiān)牢的瞬間若皱,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 33,012評論 1 269
  • 我被黑心中介騙來泰國打工有梆, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留是尖,地道東北人。 一個月前我還...
    沈念sama閱讀 48,126評論 3 370
  • 正文 我出身青樓泥耀,卻偏偏與公主長得像饺汹,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個殘疾皇子痰催,可洞房花燭夜當晚...
    茶點故事閱讀 44,914評論 2 355

推薦閱讀更多精彩內(nèi)容

  • Github地址:-CollectionViewLayout-CollectionViewFlowLayout- ...
    大沖哥閱讀 5,210評論 1 10
  • 發(fā)現(xiàn) 關(guān)注 消息 iOS 第三方庫兜辞、插件、知名博客總結(jié) 作者大灰狼的小綿羊哥哥關(guān)注 2017.06.26 09:4...
    肇東周閱讀 12,103評論 4 62
  • 我老公吧夸溶,給他發(fā)短信逸吵,他總是只看后半句,有時讓他帶兩三樣東西缝裁,他就只帶后面一樣扫皱。剛才在公交車上,一個婦女給她老公打...
    沙加之倫閱讀 139評論 0 0
  • 發(fā)展地講捷绑,所謂「高低貴賤」的存在是可以推動音樂向上發(fā)展的韩脑。問題本身沒有給出一個具體的切入點,自覺不應該不魯莽地回答...
    danniyeats閱讀 989評論 0 0
  • 南國的芙蓉城,這些年的冬天是少見有雪的粹污,尤其是鵝毛大雪段多。 小時候卻幾乎是年年下雪。一下雪壮吩,就是孩子們的天堂进苍,堆雪人...
    明月朗星閱讀 401評論 0 1