2013-05-21 4 views
0

발생하는 문제를 해결하는 데 도움을 줄 수 있습니까?Tapku 캘린더 Timelineview에서 이벤트가 다시로드 된 후에 표시되지 않습니다.

이벤트를 표시하려면 Tapku Calendar Library Day View를 사용하고 있습니다. 캘린더를 처음으로로드하면 이벤트가 제대로 표시됩니다. 어제 나 내일을 말하면서 날짜가 바뀌면 달력에 이벤트가 표시되지 않습니다.

다음 이벤트를 구현했습니다.

- (void)calendarDayTimelineView:(TKCalendarDayView *)calendarDay didMoveToDate:(NSDate *)date 
{ 
//Here is my logic to pull the data from db server. 
//After this I am calling the method below. 
[self.dayView reloadData]; 
} 

    - (NSArray *) calendarDayTimelineView:(TKCalendarDayView*)calendarDayTimeline eventsForDate:(NSDate *)eventDate{ 
    self.myAppointments = nil; 
    NSFetchRequest *fetchRequest = [[[NSFetchRequest alloc] init] autorelease]; 
    NSEntityDescription *entity = [NSEntityDescription 
            entityForName:@"Tasks" inManagedObjectContext:self.managedObjectContext]; 
    [fetchRequest setEntity:entity]; 
    NSError *error; 
    self.myAppointments = [self.managedObjectContext executeFetchRequest:fetchRequest error:&error]; 

    if([eventDate compare:[NSDate dateWithTimeIntervalSinceNow:-24*60*60]] == NSOrderedAscending) return @[]; 
    if([eventDate compare:[NSDate dateWithTimeIntervalSinceNow:24*60*60]] == NSOrderedDescending) return @[]; 

    NSDateComponents *info = [[NSDate date] dateComponentsWithTimeZone:calendarDayTimeline.timeZone]; 
    info.second = 0; 
    NSMutableArray *ret = [NSMutableArray array]; 

    for(Tasks *apt in self.myAppointments){ 

     TKCalendarDayEventView *event = [calendarDayTimeline dequeueReusableEventView]; 
     if(event == nil) event = [TKCalendarDayEventView eventView]; 

     event.identifier = nil; 
     event.titleLabel.text = apt.task_subject; 

     if ([allTrim(apt.location) length] != 0) 
     { 
      event.locationLabel.text = apt.location; 
     } 

     NSDate *startDate = apt.task_start; 
     NSDate *endDate = apt.task_end; 

     NSCalendar *calendar = [NSCalendar currentCalendar]; 
     NSDateComponents *components = [calendar components:(NSHourCalendarUnit | NSMinuteCalendarUnit) fromDate:startDate]; 
     NSInteger hour = [components hour]; 
     NSInteger minute = [components minute]; 

     info.hour = hour; 
     info.minute = minute; 
     event.startDate = [NSDate dateWithDateComponents:info]; 

     components = [calendar components:(NSHourCalendarUnit | NSMinuteCalendarUnit) fromDate:endDate]; 
     hour = [components hour]; 
     minute = [components minute]; 


     info.hour = hour; 
     info.minute = minute; 
     event.endDate = [NSDate dateWithDateComponents:info]; 

     [ret addObject:event]; 

    } 

    return ret; 
} 

코드를 디버깅했는데 데이터가 이벤트에 할당되지만 캘린더에는 아무 것도 볼 수 없습니다.

Pls ..이 문제를 수정하는 데 도움이됩니다.

감사합니다,

g.v.n.sandeep

+0

당신은 어떤 식 으로든 그것을 픽스쳐 넣었습니까? – Zerho

답변

1

이 문제를 해결하는 또 다른 방법이있다. 아래의 방법에

보시다시피

:

- (void)viewDidLoad 
{ 
    [super viewDidLoad]; 
    self.title = NSLocalizedString(@"Day View", @""); 


    self.data = @[ 
    @[@"Meeting with five random dudes", @"Five Guys", @960, @0, @1000, @30], 
    @[@"Unlimited bread rolls got me sprung", @"Olive Garden", @7, @0, @12, @0], 
    @[@"Appointment", @"Dennys", @15, @0, @18, @0], 
    @[@"Hamburger Bliss", @"Wendys", @15, @0, @18, @0], 
    @[@"Fishy Fishy Fishfelayyyyyyyy", @"McDonalds", @5, @30, @6, @0], 
    @[@"Turkey Time...... oh wait", @"Chick-fela", @14, @0, @19, @0], 
    @[@"Greet the king at the castle", @"Burger King", @19, @30, @100, @0]]; 
} 

self.data가로드됩니다.

글을 쓰는 경우 데이터를 업데이트하기 위해로드 프로세스를 'viewWillAppear'메소드로 이동할 수 있습니다. 특정 날짜에 이벤트를 추가 할 방법이 없음에 유의하십시오. 그러나 다음과 같은 이벤트를 추가 할 수 있습니다. @ [@ "Fishy Fishy Fishfelayyyyyyy", @ "McDonalds", @ 48, @ 00, @ 50, @ 0]. @ 48은 내일 이후의 이벤트를 의미합니다.

그래서 먼저 특정 날짜와 self.dayview.date (오늘) 사이의 간격을 계산해야합니다. 다음은

- (NSArray *)getTimeFromNow:(NSDate *)startDate endDateTime:(NSDate *)endDate 
{ 
    NSDate *todayDate = [NSDate date]; 
    NSTimeInterval startFromNowSeconds = [startDate timeIntervalSinceDate:todayDate]; 
    NSTimeInterval endFromNowSeconds = [endDate timeIntervalSinceDate:todayDate]; 

    NSNumber *startHour = [NSNumber numberWithInt:startFromNowSeconds/(60 * 60)]; 
    NSNumber *startMinute = [NSNumber numberWithInt:startFromNowSeconds/60 - startHour.intValue * 60]; 

    NSNumber *endHour = [NSNumber numberWithInt:endFromNowSeconds/(60 * 60)]; 
    NSNumber *endMinute = [NSNumber numberWithInt:endFromNowSeconds/60 - endHour.intValue * 60]; 

    return @[startHour, startMinute, endHour, endMinute]; 
} 

은 논평한다 : 다음과 같은 코드가 도움이 될 수 있습니다

if([eventDate compare:[NSDate dateWithTimeIntervalSinceNow:-24*60*60]] == NSOrderedAscending) return @[]; 
if([eventDate compare:[NSDate dateWithTimeIntervalSinceNow:24*60*60]] == NSOrderedDescending) return @[]; 

그러나 시간대에주의를 기울이십시오. 위에 계산 된 올바른 시간 배열을 반환하는 것은 그리 쉽지 않은 일이라고 생각합니다.

더 이상, 나는 DayViewController의 특정 날짜에 이벤트를 추가하는 메소드를 추가하는 것이 필수적이라고 생각합니다.

참고 : 내가 코딩을 했으므로 시간이 @ 900 시간이면 dayview에 이벤트가 표시되지 않지만 @ 500 시간이면 제대로 작동합니다.

정말 대단한 디자인입니다! 더 완벽한 dayviewcontroller를 기다리는 중 ...

관련 문제