2010-08-04 17 views
1

我想一个特殊的背景适用于第一个单元格在我的UITableView: 我申请了BG在:UITableViewCell的背景重复如果电池滚出屏幕

- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath 

这是它是如何应用:

if (indexPath.row == 1) { 
      cell.contentView.backgroundColor = [[UIColor alloc] initWithPatternImage:[UIImage imageNamed:@"top-message-bg.png"]]; 
     } 

问题是,当这个单元格滚动屏幕,一个新的单元格将indexPath.row == 1.我怎样才能确保只有这个单元格有这个背景?

更新:这里是完整的方法

// Customize the appearance of table view cells. 
- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath { 

    static NSString *CellIdentifier = @"Cell"; 

    // UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:CellIdentifier]; 
    STVCell *cell = (STVCell*)[tableView dequeueReusableCellWithIdentifier:CellIdentifier]; 

    if (indexPath.row == 0) { 
     if(mainVideoCell == nil) 
     { 
      mainVideoCell = [[MainVideoCell alloc] initWithStyle:UITableViewCellStyleValue1 reuseIdentifier:@"MainVideoCell"]; 
      mainVideoCell.contentView.backgroundColor = [UIColor colorWithRed:242.0/255.0 green:242.0/255.0 blue:242.0/255.0 alpha:1.0]; 
     } 

     // Configure the cell... 
     STVideo *mySTVideo; 
     mySTVideo = [items objectAtIndex:indexPath.row]; 

     mainVideoCell.videoTitle.text = mySTVideo.video_title; 

     /*NSDateFormatter *formatter = [[NSDateFormatter alloc] init]; 
     [formatter setFormatterBehavior:NSDateFormatterBehavior10_4]; 
     [formatter setDateStyle:NSDateFormatterShortStyle]; 
     [formatter setTimeStyle:NSDateFormatterNoStyle]; 
     NSString *result = [formatter stringFromDate:[NSDate date]]; 
     [formatter release];*/ 

     mainVideoCell.dateLabel.text = [Utils toShortTimeIntervalStringFromStockTwits:mySTVideo.publish_on]; //result; //[mySTVideo.publish_on substringToIndex:10];//[Utils toShortTimeIntervalStringFromStockTwits:mySTVideo.publish_on]; 
     mainVideoCell.videoDescription.text = mySTVideo.description; 
     mainVideoCell.authorLabel.text = [NSString stringWithFormat:@"with %@", mySTVideo.author]; 
     [mainVideoCell.videoThumbnail loadImageFromURL:[NSURL URLWithString:mySTVideo.thumbnail_url]]; 
     NSLog(@"Description:%@",mySTVideo.description); 

     return mainVideoCell; 
    } 
    else { 
     if (cell == nil) { 
      //cell = [[[UITableViewCell alloc] initWithStyle:UITableViewCellStyleSubtitle reuseIdentifier:CellIdentifier] autorelease]; 
      cell = [[[STVCell alloc] initWithStyle:UITableViewCellStyleDefault reuseIdentifier:CellIdentifier] autorelease]; 
     } 

     // Configure the cell... 
     STVideo *mySTVideo; 
     mySTVideo = [items objectAtIndex:indexPath.row]; 

     cell.videoTitle.text = mySTVideo.video_title; 

     /*NSDateFormatter *formatter = [[NSDateFormatter alloc] init]; 
     [formatter setFormatterBehavior:NSDateFormatterBehavior10_4]; 
     [formatter setDateStyle:NSDateFormatterShortStyle]; 
     [formatter setTimeStyle:NSDateFormatterNoStyle]; 
     NSString *result = [formatter stringFromDate:[NSDate date]]; 
     [formatter release];*/ 

     cell.dateLabel.text = [Utils toShortTimeIntervalStringFromStockTwits:mySTVideo.publish_on];//result; //[mySTVideo.publish_on substringToIndex:10];//[Utils toShortTimeIntervalStringFromStockTwits:mySTVideo.publish_on]; 
     cell.videoDescription.text = mySTVideo.description; 
     cell.authorLabel.text = [NSString stringWithFormat:@"with %@", mySTVideo.author]; 
     [cell.videoThumbnail loadImageFromURL:[NSURL URLWithString:mySTVideo.thumbnail_url]]; 

     if (indexPath.row == 1) { 
      cell.contentView.backgroundColor = [[UIColor alloc] initWithPatternImage:[UIImage imageNamed:@"top-message-bg.png"]]; 
     } 
     else { 
      UIImageView* imageView = [[UIImageView alloc] initWithFrame:CGRectZero]; 
      imageView.image = [[UIImage imageNamed:@"message-bg.png"] stretchableImageWithLeftCapWidth:1 topCapHeight:20];//[[UIColor alloc] initWithPatternImage:[UIImage imageNamed:@"message-bg.png"]]; 
      [imageView setOpaque:YES]; 
      [cell setBackgroundView:imageView]; 
      [imageView release]; 
     } 


     return cell;   
    } 
} 

回答

0

我们展示整个代码为cellForRowAtIndexPath请。我怀疑你只是没有正确配置单元格。我可能是错的,但是你是否只在实际创建单元格时才使用此背景?单元格被缓存,因此您必须确保将每个单元格的背景设置为正常,以便从缓存中出来。

if (indexPath.row == 1) { 
      cell.contentView.backgroundColor = [[UIColor alloc] initWithPatternImage:[UIImage imageNamed:@"top-message-bg.png"]]; 
} 
else 
{ 
    cell.contentView.backgroundColor = // whatever normal background is 
} 
0

听起来像你重复使用单元格的方式有问题。问题不在于indexPath.row等于1,而是为行= 1单元创建的单元格正在被重用。也许你应该添加其他条件:

if (indexPath.row == 1) { 
     cell.contentView.backgroundColor = [[UIColor alloc] initWithPatternImage:[UIImage imageNamed:@"top-message-bg.png"]]; 
    } 
else { 
    cell.contentView.backgroundColor = [UIColor whiteColor]; 
}