2011-08-24 114 views
8

我向UITableViewCell添加子视图时遇到了问题。 当桌子尺寸低于iPhone尺寸时,它正在工作。向UITableViewCell添加子视图

但是当规模较大,这使得一些像这样的恐怖效果,当我滚动:

enter image description here

它应该是这样的:

enter image description here 那么我认为这来自细胞再利用。 这里是我的代码的示例:

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

    static NSString *kCellIdentifier = @"UITableViewCellStyleSubtitle"; 

    UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:kCellIdentifier]; 
    if (cell == nil) { 
     //construct the cell 
     cell = [[[UITableViewCell alloc] initWithStyle:UITableViewCellStyleSubtitle 
             reuseIdentifier:kCellIdentifier] autorelease]; 


     //clear the previuous content 
     NSLog(@"Il y a %d subviews", [[[cell contentView] subviews] count]); 
     //[[[cell contentView] subviews] makeObjectsPerformSelector: @selector(removeFromSuperview)]; 
     NSLog(@"Il y a %d subviews", [[[cell contentView] subviews] count]); 
     [[cell textLabel] setBackgroundColor:[UIColor clearColor]]; 
     [cell setSelectionStyle:UITableViewCellEditingStyleNone]; 
    }  

    switch (indexPath.row) { 
     case 0: 
      [cell addSubview:titleEvent]; 
      break; 
     case 1: 
      //load the owner logo 
      [cell addSubview:logoAsso]; 
      break; 
     case 2: 
      //StartDate 
      [cell addSubview:clockImage]; 
      break; 
     case 3: 
      //EndDate 
      [cell addSubview:clockEndImage]; 
      break; 
     case 4: 
      //Address 
      [cell addSubview:adress]; 
      break; 
     case 5: 
      //map 
      [cell addSubview:map]; 
      break; 
     case 6: 
      //header 
      [Graphism configureSeparationCell:cell]; 
      break; 
     case 7: 
      //descritpion 
      [cell addSubview:descriptionEvent]; 
      break; 
     default: 
      break; 
    } 
    return cell; 
} 

的子视图是类的attributs,和在该方法中viewDidLoad中配置。 如果你能告诉我我做错了什么,那会是一种解脱。

回答

4
switch (indexPath.row) { 
    case 0: 


     if (![cell.contentView viewWithTag:11]) { 

      titleEvent.tag = 11; 

      [cell.contentView addSubview:titleEvent]; 
     } 


     break; 
    case 1: 
     if (![cell.contentView viewWithTag:11]) { 

      logoAsso.tag = 11; 

      [cell.contentView addSubview:logoAsso]; 
     } 

这样对于所有开关情况下做

-3

[cell.contentView addSubview:clockImage];

5

试试这个代码

- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath 
{ 
    UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:@"cellIdentifier"]; 

    if (cell == nil) { 
     cell = [[[UITableViewCell alloc] initWithStyle:UITableViewCellStyleDefault reuseIdentifier:@"cellIdentifier"] autorelease]; 

    } else { 
     UIView *subView = (UIView *)[cell.contentView viewWithTag:1]; 
     if ([subView superview]) { 
      [subView removeFromSuperview]; 
     } 
    } 

    UIView *subView = [[UIView alloc] init]; 
    subView.tag = 1; 
    [cell.contentView addSubview:subView]; 
    [subView release]; 

    return cell; 
}