LoginSignup
7
7

More than 5 years have passed since last update.

【作ってみた】カレンダーUI

Posted at

日付ごとにデータを管理して表示するっていうことをしたくて
一般的なカレンダーのような表示をしたい…
ということで、自分で作ってみました。
きっとこれぐらいのものなら、ライブラリもいっぱい転がってるのでしょうけど、勉強がてら…

ある程度形になったので、いつもの様に?のっけてみる(笑)


ANZCalendar

普通のカレンダー(月単位の)表示を実現。
ソース

  • ANZCalendar.h
  • ANZCalendarCell.h
  • ANZCalendarDataObject.h
  • ANZCalendarMenuBar.h
  • ANZCalendarNavigator.h

iOSシミュレータのスクリーンショット 2013.12.22 2.39.17.png

できること

  • 左右のスワイプで表示月更新
  • 各種色の変更
  • フォント系の変更
  • delegateによる各種タイミングでの処理

使い方

呼び出し

ANZCalendar* calendar = [[ANZCalendar alloc] initWithDisplayDate:[NSDate date]];
calendar.delegate = self;
[calendar show];

デリゲートでの処理

表示月切り替え

- (void)willRenewCalendarWithNewDate:(NSDate *)newDate
{
    // newDateに切り替わった日付がくるので、
    // そこから何か処理をするとか…持ってるデータの切り替えとか
    NSLog(@"new date :%@", newDate);
}

日付を選択した場合

- (void)didSelectDay:(NSDateComponents *)dateComponents
{
    // 選択した日付が返ってくるので、
    // それに伴って処理を行う
    NSLog(@"select day:%@", dateComponents);
}

特定日を強調

// 特定の日付を強調して表示したい場合
// 例えば内部で保持しているデータと日付がマッチしてたら…とか
- (BOOL)isStrongDayWithDateComponents:(NSDateComponents *)dateComponents
{
    // YESをかえすと強調される
    // attributesStrong系のプロパティで表示は変更可

    // とりあえずの返し
    return ([dateComponents day] % 6 == 0);
}
- (UIView *)accentStrongDayWithDateComponents:(NSDateComponents *)dateComponents cellSize:(CGSize)size
{
    if ([dateComponents day] % 5 != 0) {
        return nil;
    }

    // 何か自分で作って表示したい場合
    // isStrongDayWithDateComponents:で対応できる感じでは物足りない場合?
    UILabel* accent = [[UILabel alloc] initWithFrame:CGRectMake(0, size.height - 20, size.width, 20)];
    accent.text = @"★";
    accent.font = [UIFont systemFontOfSize:12.f];
    accent.adjustsFontSizeToFitWidth = YES;
    accent.backgroundColor = [UIColor clearColor];
    accent.textColor = [UIColor purpleColor];
    accent.textAlignment = NSTextAlignmentRight;
    return accent;
}

memo

collectionview使ってみたので、いい勉強になった。あまり触ったことなかったし。
(とはいってもカスタムレイアウトはつくってないのだけれど…
当初考えていたよりなんか大掛かりになっちゃった。5つクラスつくっちゃった…。

あとは上下スワイプで、年単位の切り替えとかつけるかも。
よくよく見てみたら…曜日表記(Sun/Mon...)がない。。すっかり忘れてた(汗)

7
7
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
7
7