2012-01-20 25 views
3

私はUIDatePickerコントローラを使用してiPhoneアプリで日付を選択しています。さて、私はUIDatePickerコントローラの代わりにカレンダービューを表示したい。私はGoogleで自分のレベルを最高に探しました。しかし、私は私の問題の正確な解決策を見つけることができません。誰でもUIDatePickerのカレンダービューを使用するのを助けてくれますか?前もって感謝します。iPhoneでUIDatePickerを使用する代わりにカレンダーを表示するには?

答えて

9

あなたの最善の策は、次のいずれかを使用することです -

1)https://github.com/guicocoa/calendar

2)http://github.com/devinross/tapkulibrary

3)http://github.com/klazuka/Kal

UIDatePickerを変換します何の準備ができて解決策はありませんカレンダービューへ

+0

Yuvaraj.M @個人的に私はKlazukaからカルを使用して、私はそれをお勧めします。しかし、1つの問題があります。日付を選択した後に新しいビューを開く場合。したがって、前月/次月を選択すると、その月の第1日が自動的に選択されます。私はtapkuを試しましたが、カレンダーはかなりうんざりしていました。日付と曜日は正しくありませんでした。多分それは今修正された、私は数ヶ月前にそれをチェックした。 – Novarg

+0

@Novargありがとうございます。私はそれを確認し、すぐにあなたに戻ってきます。ありがとう。 –

1

このセルをコレクションビューに作成して、このセルをd isplayカレンダー。

calenderCell.h

#import <UIKit/UIKit.h> 
//#import "UIView+Alignment.h" 
//#import "UIView+Layout.h" 

@protocol CalendarCellDelegte <NSObject> 
- (void)updateSelectedDate:(NSDate*)date; 
@end 


@interface CalendarCell : UICollectionViewCell 
{ 
    NSMutableArray *labelArray; 
    NSDateComponents *currentMonth; 
    __weak id _delegate; 
} 

@property (nonatomic, weak) id delegate; 
@property(nonatomic, retain) NSCalendar *calendar; 
@property (atomic, strong) NSDate *firstDay; 
- (void)UpdateCalendarCell:(NSDateComponents*)month_ selectedDate:(NSDate*)selDate; 

@end 

calenderCell.m

#import "CalendarCell.h" 

@implementation CalendarCell 
@synthesize calendar=_calendar; 
@synthesize delegate=_delegate; 

- (id)initWithFrame:(CGRect)frame 
{ 
    self = [super initWithFrame:frame]; 
    if (self) { 
     // Initialization code 
     NSArray *arrayOfViews = [[NSBundle mainBundle] loadNibNamed:@"CalendarCell" owner:self options:nil]; 

     if ([arrayOfViews count] < 1) { 
      return nil; 
     } 

    if (![[arrayOfViews objectAtIndex:0] isKindOfClass:[UICollectionViewCell class]]) { 
     return nil; 
    } 

    self = [arrayOfViews objectAtIndex:0]; 
    labelArray=[[NSMutableArray alloc]init]; 
    for (int i=0; i<5; i++) 
    { 
     for (int j=0; j<7; j++) 
     { 
      CGRect rect; 
      rect=CGRectMake(((j*2)+2)+(j*44), (i*44), 42, 42); 

      // NSLog(@"%f",rect.origin.x); 
      UIView *view=[[UIView alloc]initWithFrame:rect]; 
      [self addSubview:view]; 
      view.layer.cornerRadius=view.bounds.size.width/2; 
      view.layer.borderColor=[UIColor clearColor].CGColor; 
      view.layer.borderWidth=1; 


      UITapGestureRecognizer *tapGestureRecognizer = [[UITapGestureRecognizer alloc] initWithTarget:self action:@selector(actionTap:)]; 
      [view addGestureRecognizer:tapGestureRecognizer]; 

      view.backgroundColor=[UIColor redColor]; 

      rect=CGRectMake(6, 3, 30, 30); 

      UILabel *label=[[UILabel alloc]initWithFrame:rect]; 
      label.backgroundColor=[UIColor greenColor];//UIColorFromRGB(0xd3d3d3); 
      [view addSubview:label]; 
      label.textColor=[UIColor whiteColor]; 
      label.textAlignment=NSTextAlignmentCenter; 
      label.userInteractionEnabled=NO; 
      [labelArray addObject:label]; 
      label.layer.cornerRadius=15; 

      // label.backgroundColor=[UIColor clearColor];UIColorFromRGB(0x6cc9ff); 
     } 
    } 
    self.calendar=[NSCalendar currentCalendar]; 
} 
return self; 
} 


- (void)UpdateCalendarCell:(NSDateComponents*)month_ selectedDate:(NSDate*)selDate 
{ 
    currentMonth=month_; 
    currentMonth.day=1; 
    [self setFirstDay:[currentMonth.calendar dateFromComponents:currentMonth]]; 
    int viewTag=1; 
    NSInteger column = 7 - [self numberOfDaysInFirstWeek]; 
    int totalNumberOfDays=(int)[self numberOfDays]; 

    for (int i=0; i<5; i++) 
    { 
     for (int j=0; j<7; j++) 
     { 
      UILabel *label=(UILabel*)[labelArray objectAtIndex:viewTag-1]; 
      label.textColor=[UIColor whiteColor]; 
      label.backgroundColor=[UIColor clearColor]; 
      label.superview.backgroundColor=[UIColor clearColor]; 
      label.superview.layer.borderColor=[UIColor clearColor].CGColor; 

      if((viewTag-column) <= 0) 
      { 
       [email protected]""; 
       label.tag=0; 
       if(totalNumberOfDays+column > 35) 
       { 
        if(35- (column-viewTag) <= totalNumberOfDays) 
        { 
         label.text=[NSString stringWithFormat:@"%li",35- (column-viewTag)]; 
         label.tag=35- (column-viewTag); 
         currentMonth.day=35- (column-viewTag); 
         NSDate *date = [[NSCalendar currentCalendar] dateFromComponents:currentMonth]; 
         NSDateComponents *otherDay = [[NSCalendar currentCalendar] components:NSEraCalendarUnit|NSYearCalendarUnit|NSMonthCalendarUnit|NSDayCalendarUnit fromDate:date]; 
         if(selDate) 
         { 
          NSDateComponents *selectDate = [[NSCalendar currentCalendar] components:NSEraCalendarUnit|NSYearCalendarUnit|NSMonthCalendarUnit|NSDayCalendarUnit fromDate:selDate]; 
          if([otherDay day] == [selectDate day] && [otherDay month] == [selectDate month] && [otherDay year] == [selectDate year] && [otherDay era] == [selectDate era]) 
          { 
           label.backgroundColor=[UIColor clearColor]; 
           label.superview.backgroundColor=[UIColor colorWithRed:23.0/255.0 green:154.0/255.0 blue:208.0/255.0 alpha:.5];//UIColorFromRGB(0x4DBDED); 
           label.superview.layer.borderColor=[UIColor clearColor].CGColor; 
          } 
         } 
        } 
       } 
      } 
      else if((viewTag-column) > [self numberOfDays]) 
      { 
       label.text=[NSString stringWithFormat:@"%li",- ([self numberOfDays]- (viewTag-column))]; 
       label.tag=0; 
       label.textColor=[UIColor lightGrayColor]; 
      } 
      else 
      { 

       label.text=[NSString stringWithFormat:@"%li",viewTag-column]; 
       label.tag=viewTag-column; 
       currentMonth.day=viewTag-column; 
       NSDate *date = [[NSCalendar currentCalendar] dateFromComponents:currentMonth]; 
       NSDateComponents *otherDay = [[NSCalendar currentCalendar] components:NSEraCalendarUnit|NSYearCalendarUnit|NSMonthCalendarUnit|NSDayCalendarUnit fromDate:date]; 
       NSDateComponents *today = [[NSCalendar currentCalendar] components:NSEraCalendarUnit|NSYearCalendarUnit|NSMonthCalendarUnit|NSDayCalendarUnit fromDate:[NSDate date]]; 
       if([today day] == [otherDay day] && [today month] == [otherDay month] && [today year] == [otherDay year] && [today era] == [otherDay era]) 
       { 
        label.backgroundColor=[UIColor clearColor];//23 154 208 
        label.superview.backgroundColor=[UIColor redColor]; 
        label.superview.layer.borderColor=[UIColor clearColor].CGColor; 
       } 
       if(selDate) 
       { 
        NSDateComponents *selectDate = [[NSCalendar currentCalendar] components:NSEraCalendarUnit|NSYearCalendarUnit|NSMonthCalendarUnit|NSDayCalendarUnit fromDate:selDate]; 
        if([otherDay day] == [selectDate day] && [otherDay month] == [selectDate month] && [otherDay year] == [selectDate year] && [otherDay era] == [selectDate era]) 
        { 
         label.backgroundColor=[UIColor clearColor]; 
         label.superview.backgroundColor=[UIColor colorWithRed:23.0/255.0 green:154.0/255.0 blue:208.0/255.0 alpha:.5]; 
         label.superview.layer.borderColor=[UIColor clearColor].CGColor; 
        } 
       } 
      } 
      viewTag++; 
     } 
    } 
} 

- (void)actionTap:(UITapGestureRecognizer*)tap 
{ 
    @try { 
     UIView *view=(UIView*)tap.view; 
     UILabel *label=(UILabel*)[view.subviews objectAtIndex:0]; 

     //if(currentMonth.day == label.tag) 
     // return; 
     if(label.tag != 0) 
     { 
      currentMonth.day=label.tag; 
      NSDate *selectedDate = [[NSCalendar currentCalendar] dateFromComponents:currentMonth]; 
      [_delegate updateSelectedDate:selectedDate]; 
     } 
    } 
    @catch (NSException *exception) { 
     NSLog(@"%@",exception); 
    } 
} 

#pragma mark - Helper methods 

- (NSInteger)numberOfWeeks { 
    return [[self calendar] rangeOfUnit:NSDayCalendarUnit 
           inUnit:NSWeekCalendarUnit 
           forDate:[self firstDay]].length; 
} 

- (NSInteger)numberOfDays { 
    return [[self calendar] rangeOfUnit:NSDayCalendarUnit 
           inUnit:NSMonthCalendarUnit 
           forDate:[self firstDay]].length; 
} 

- (NSInteger)numberOfDaysInFirstWeek { 
    return [[self calendar] rangeOfUnit:NSDayCalendarUnit 
           inUnit:NSWeekCalendarUnit 
           forDate:[self firstDay]].length; 
} 

@end 
関連する問題