我的tableview解析日历RSS Feed。我将单元格设置为每个单元格的图像为空白日历图标,并添加月份和日期的子视图,它使用RSS本身的NSDate进行检测。但是,出于某种原因,它为每个事件显示2个单元格,我无法弄清楚原因。这是单元格的代码:
- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath {
static NSString *CellIdentifier = @"Cell";
UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:CellIdentifier];
if (cell == nil) {
cell = [[[UITableViewCell alloc] initWithStyle:UITableViewCellStyleSubtitle reuseIdentifier:CellIdentifier] autorelease];
RSSEntry *entry = [_allEntries objectAtIndex:indexPath.row];
NSDateFormatter * dateFormatter = [[[NSDateFormatter alloc] init] autorelease];
[dateFormatter setTimeZone:[NSTimeZone localTimeZone]];
[dateFormatter setTimeStyle:NSDateFormatterShortStyle];
[dateFormatter setDateStyle:NSDateFormatterShortStyle];
NSDateFormatter *formatter = [[NSDateFormatter alloc] init];
[formatter setDateFormat:@"MM"];
NSString *monthfromdate = [formatter stringFromDate:entry.articleDate];
NSLog(@"%@", monthfromdate);
[formatter release];
NSDateFormatter *formatter2 = [[NSDateFormatter alloc] init];
[formatter2 setDateFormat:@"dd"];
NSString *datefromdate = [formatter2 stringFromDate:entry.articleDate];
NSLog(@"%@", datefromdate);
[formatter2 release];
if ([monthfromdate isEqualToString:@"01"]) {
self.currentmonth = @"January";
}
if ([monthfromdate isEqualToString:@"02"]) {
self.currentmonth = @"February";
}
if ([monthfromdate isEqualToString:@"03"]) {
self.currentmonth = @"March";
}
if ([monthfromdate isEqualToString:@"04"]) {
self.currentmonth = @"April";
}
if ([monthfromdate isEqualToString:@"05"]) {
self.currentmonth = @"May";
}
if ([monthfromdate isEqualToString:@"06"]) {
self.currentmonth = @"June";
}
if ([monthfromdate isEqualToString:@"07"]) {
self.currentmonth = @"July";
}
if ([monthfromdate isEqualToString:@"08"]) {
self.currentmonth = @"August";
}
if ([monthfromdate isEqualToString:@"09"]) {
self.currentmonth = @"September";
}
if ([monthfromdate isEqualToString:@"10"]) {
self.currentmonth = @"October";
}
if ([monthfromdate isEqualToString:@"11"]) {
self.currentmonth = @"November";
}
if ([monthfromdate isEqualToString:@"12"]) {
self.currentmonth = @"December";
}
NSString *currentday = datefromdate;
NSString *articleDateString = [dateFormatter stringFromDate:entry.articleDate];
UIFont *cellFont = [UIFont fontWithName:@"ArialRoundedMTBold" size:15];
UIFont *cellFont2 = [UIFont fontWithName:@"ArialRoundedMTBold" size:12];
UIFont *cellFont3 = [UIFont fontWithName:@"ArialRoundedMTBold" size:9];
UIFont *cellFont4 = [UIFont fontWithName:@"ArialRoundedMTBold" size:18];
UILabel *month = [[UILabel alloc] initWithFrame:CGRectMake(8, 10, 53, 21)];
month.font = cellFont3;
month.text = currentmonth;
month.textAlignment = UITextAlignmentCenter;
month.backgroundColor = [UIColor clearColor];
UILabel *date = [[UILabel alloc] initWithFrame:CGRectMake(11, 21, 50, 45)];
date.font = cellFont4;
date.text = currentday;
date.textAlignment = UITextAlignmentCenter;
date.backgroundColor = [UIColor clearColor];
UIImageView *alternate = [[UIImageView alloc] initWithFrame:CGRectMake(1,1,69,69)];
alternate.image = [UIImage imageNamed:@"calendar1.png"];
alternate.contentMode = UIViewContentModeScaleAspectFit;
UILabel *alternatelabel = [[UILabel alloc] initWithFrame:CGRectMake(82,0,228,53)];
alternatelabel.backgroundColor = [UIColor clearColor];
CALayer * l = [alternate layer];
[l setMasksToBounds:YES];
UILabel *detailLabel = [[UILabel alloc] initWithFrame:CGRectMake(82, 20, 228, 53)];
detailLabel.backgroundColor = [UIColor clearColor];
detailLabel.text = [NSString stringWithFormat:@"%@ - %@", articleDateString, entry.blogTitle];
detailLabel.textColor = [UIColor grayColor];
detailLabel.font = cellFont2;
alternatelabel.font = cellFont;
alternatelabel.text = entry.articleTitle;
[cell.contentView addSubview:alternate];
[cell.contentView addSubview:alternatelabel];
[cell.contentView addSubview:detailLabel];
[cell.contentView addSubview:month];
[cell.contentView addSubview:date];
[detailLabel release];
[alternatelabel release];
[alternate release];
}
return cell;
}
答案 0 :(得分:1)
使用细胞重用机制是错误的。使用此模板
#define TAG_MONTH 1001
- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath {
static NSString *CellIdentifier = @"Cell";
RSSEntry *entry = [_allEntries objectAtIndex:indexPath.row];
UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:CellIdentifier];
if (cell == nil) {
cell = [[[UITableViewCell alloc] initWithStyle:UITableViewCellStyleSubtitle reuseIdentifier:CellIdentifier] autorelease];
// any other views can be added to cell here
UILabel *month = [[UILabel alloc] initWithFrame:CGRectMake(8, 10, 53, 21)];
month.font = cellFont3;
month.textAlignment = UITextAlignmentCenter;
month.backgroundColor = [UIColor clearColor];
month.tag = TAG_MONTH;
}
// here you should fill all fields of cell with "entry" or make it empty
NSString currentmonth = @"something";
UILabel *month = [cell.contentView viewWithTag:TAG_MONTH];
month.text = currentmonth;
return cell;
}
其他时刻:
将其推广到新方法
if([monthfromdate isEqualToString:@“01”]){
self.currentmonth = @“1月”;
}
并优化,它可以更简单
答案 1 :(得分:0)
检查此方法返回的数字,可能是其返回2
- (NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section;