に見せようとしCalendar
ていUITableView
ます。各セクションは暦の各年に対応し、各セクションには 12 のセルが含まれ、12 か月に対応します。
現在の日付から 5 年前、今後 5 年間の 10 年間のカレンダーを表示しようとしています。現在の年 (セクション) 2013 を セクション 0 として読み込むことができますUITableView
。しかし、テーブルを上にスクロールすると、2013 年の上に 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];
});
}
}
したがって、現在のセクションの前にセクションを表示したいだけです。