0

私のテーブルビューは、カレンダーの 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 に答える