0

iOS アプリケーションで TAPKU カレンダーを使用しています。tapku カレンダーに完全なデータをロードした後、日付タイルにいくつかのマークを追加したいと考えています。

非同期プロセスから追加のデータを取得しており、そのデータをカレンダーにもマークしたいと考えています。

これどうやってするの。前もって感謝します。

4

1 に答える 1

0

これは確かに可能です。日カレンダー ビューの例として、_refreshDataPageWithAtIndex を次のように変更します。

- (void) _refreshDataWithPageAtIndex:(NSInteger)index{

    UIScrollView *sv = self.pages[index];
    TKTimelineView *timeline = [self _timelineAtIndex:index];


    CGRect r = CGRectInset(self.horizontalScrollView.bounds, HORIZONTAL_PAD, 0);
    r.origin.x = self.horizontalScrollView.frame.size.width * index + HORIZONTAL_PAD;
    sv.frame = r;



    timeline.startY = VERTICAL_INSET;

    for (UIView* view in sv.subviews) {
        if ([view isKindOfClass:[TKCalendarDayEventView class]]){
            [self.eventGraveYard addObject:view];
            [view removeFromSuperview];
        }
    }

    if(self.nowLineView.superview == sv) [self.nowLineView removeFromSuperview];
    if([timeline.date isTodayWithTimeZone:self.timeZone]){

        NSDate *date = [NSDate date];
        NSDateComponents *comp = [date dateComponentsWithTimeZone:self.timeZone];

        NSInteger hourStart = comp.hour;
        CGFloat hourStartPosition = hourStart * VERTICAL_DIFF + VERTICAL_INSET;

        NSInteger minuteStart = round(comp.minute / 5.0) * 5;
        CGFloat minuteStartPosition = roundf((CGFloat)minuteStart / 60.0f * VERTICAL_DIFF);

        CGRect eventFrame = CGRectMake(self.nowLineView.frame.origin.x, hourStartPosition + minuteStartPosition - 5, NOB_SIZE + self.frame.size.width - LEFT_INSET, NOB_SIZE);
        self.nowLineView.frame = eventFrame;
        [sv addSubview:self.nowLineView];

    }

    if(!self.dataSource) return;

    timeline.events = [NSMutableArray new];
    [self.dataSource calendarDayTimelineView:self eventsForDate:timeline.date andEvents:timeline.events success:^{
        [timeline.events sortUsingComparator:^NSComparisonResult(TKCalendarDayEventView *obj1, TKCalendarDayEventView *obj2){
            return [obj1.startDate compare:obj2.startDate];
        }];

        [self _realignEventsAtIndex:index];
        if(self.nowLineView.superview == sv)
            [sv bringSubviewToFront:self.nowLineView];
    }];
}

次に、eventsForDate 関数を次のように変更します。

- (void) calendarDayTimelineView:(TKCalendarDayView*)calendarDayTimeline eventsForDate:(NSDate *)eventDate andEvents:(NSMutableArray *)events success:(void (^)())success {

    [Model doSomethingAsync andSuccess:^(NSArray *classes) {

        // .. Add stuff to events..

        success();
    }];
}

他のコントロールのパターンは非常に似ていると思います。前提は、データを取得するまで書式設定/レイアウト フローを続行するのを待っていることです。

于 2013-10-09T02:37:50.347 に答える