2010-08-04 47 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]; 
}