我正在尝试将Calendar
展示给UITableView
。每个部分对应于每年的日历,每个部分包含12个单元格,对应于12个月。
我试图显示10年日历,5年回到当前日期和未来5年。
我可以将当前年份(部分)加载为UITableView
中的第0部分。
但是当我向上滚动表格时,我想看到2012年以上的2012年。但是因为2013年是第0部所以虽然能在简单的现在的部门之后插入新的部门但是不能这样做。
- (id)initWithFrame:(CGRect)frame logic:(LineKalMonthLogic *)theLogic delegate:(id<LineKalViewDelegate>)theDelegate
{
frame.size.width = kkLineTileSize.width;
frame.size.height = 31 * kkLineTileSize.height;
if (self = [super initWithFrame:frame]) {
self.clipsToBounds = YES;
logic = [theLogic retain];
delegate = theDelegate;
CGRect rect = CGRectMake(0, 0,1024, 716);
_mainTable =[[UITableView alloc] initWithFrame:rect style:UITableViewStyleGrouped];
_mainTable.delegate = self;
_mainTable.dataSource = self;
_mainTable.backgroundColor = [UIColor grayColor];
[self addSubview:_mainTable];
monthHeight = 723;
backMonthArray = [[NSMutableArray alloc] init];
heightArray = [[NSMutableArray alloc] init];
_sectionNo = 1;
}
return self;
}
-(void)calculateMonths:(int)monthNo{
int i ;
for (i=monthNo; i<monthNo+12; i++) {
CGRect monthRect = CGRectMake(0.f, 0.f, 1024,723);
backMonthView = [[[LineKalMonthView alloc] initWithFrame:monthRect andDays: [logic numberOfdaysInMonth:i] andMonthName:(NSString *)[logic gettingMonthDate:i]] autorelease];
[delegate showForCurrentMonth];
[backMonthView showDates:logic.daysInSelectedMonth
leadingAdjacentDates:logic.daysInFinalWeekOfPreviousMonth
trailingAdjacentDates:logic.daysInFirstWeekOfFollowingMonth];
[backMonthArray addObject:backMonthView];
[delegate reloadData];
monthHeight = backMonthView.frame.size.height;
[heightArray addObject:[NSNumber numberWithFloat:monthHeight]];
}
nextMonthNo = i;
}
- (NSInteger)numberOfSectionsInTableView:(UITableView *)tableView
{
return _sectionNo; //count of section
}
- (NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section {
return 12;
}
- (CGFloat)tableView:(UITableView *)tableView heightForRowAtIndexPath:(NSIndexPath *)indexPath
{
return [[heightArray objectAtIndex:indexPath.row+indexPath.section*12] intValue];
}
- (UITableViewCell *)tableView:(UITableView *)tableView
cellForRowAtIndexPath:(NSIndexPath *)indexPath
{
static NSString *MyIdentifier = @"MyIdentifier";
UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:nil];
if (cell == nil)
{
cell = [[[UITableViewCell alloc] initWithStyle:UITableViewCellStyleDefault
reuseIdentifier:MyIdentifier] autorelease];
cell.selectionStyle = UITableViewCellSelectionStyleNone;
}
[cell.contentView addSubview:[backMonthArray objectAtIndex:indexPath.row+indexPath.section*12]]; //backMonthArray contains 12 months data
return cell;
}
-(void)tableView:(UITableView *)tableView willDisplayCell:(UITableViewCell *) cell forRowAtIndexPath:(NSIndexPath *)indexPath
{
if(indexPath.row == 10 && indexPath.section == _sectionNo-1) //self.array is the array of items you are displaying
{
dispatch_async(dispatch_get_main_queue(), ^{
[self calculateMonths:nextMonthNo];
_sectionNo = _sectionNo+1;
[_mainTable insertSections:[NSIndexSet indexSetWithIndex:_sectionNo-1] withRowAnimation:UITableViewRowAnimationNone];
});
}
}
所以我只想在当前部分之前显示部分。