0

我的 tableview 解析日历 RSS 提要。我将单元格设置为每个单元格的图像都有一个空白日历图标,并添加月份和日期的子视图,它使用来自 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;
}
4

2 回答 2

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;
}

其他时刻:

  1. 你不应该在循环中初始化格式化程序,初始化一次。
  2. 将其提取到新方法中

    if ([monthfromdate isEqualToString:@"01"]) {
    self.currentmonth = @"January";
    }

    和优化,它可以更简单

于 2012-09-21T21:37:58.380 回答
0

检查此方法返回的数字,可能是它的返回 2

- (NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section;
于 2012-09-21T04:33:43.120 回答