2012-11-29 55 views
0

我增加了自定义按钮进入我cell.contentView,我注意到,每当一个细胞滚动到屏幕的可见部分和背面,按钮被重新添加 - 它的半透明部分变得更加坚固。什么是正确的方式来处理它,以便它不会在滚动浏览tableView时在顶部堆叠更多的对象?请注意,每个单元的自定义内容都不相同,因此我无法将其放入if (cell == nil) {...}块中。UITableViewCell的自定义内容时,细胞变得可见

我的代码是:

UISegmentedControl *btn = [[UISegmentedControl alloc] initWithItems:[NSArray arrayWithObject:btn_title]]; 
// set various other properties of btn 
... 
[cell.contentView addSubview:btn]; 

回答

3

每次细胞出列,你必须增加新的之前删除旧的子视图,否则你会得到叠加效应。您可以在以下两个位置之一执行此操作:

a)在tableView:cellForRowAtIndexPath:中,在dequeueReusableCellWithIdentifier:呼叫之后和添加新视图之前删除旧视图。 b)如果您使用的子类为UITableViewCell,则可以覆盖prepareForReuse以删除不需要的视图。每次细胞出院重新使用时都会调用prepareForReuse,因此这是从上次配置单元格后摆脱旧视图的好地方。

+1

我去与方法:运行'dequeueReusableCellWithIdentifier'和'如果(细胞==零){之后。 ..}'我'用于(在cell.contentView.subviews的UIView * v){ 如果([v isKindOfClass:[UISegmentedControl类]]){ [v removeFromSuperview]; } }'也可以根据需要轻松添加其他类型的视图。 – SaltyNuts

0

我会针对您发布的代码发布样本修复。它可以扩展到照顾更多的意见。

的步骤是:

  1. 创建您CustomCell类中的方法,是以整个设置的照顾(例如:setupWithItems:
  2. 一旦你有了cellForRowAtIndexPath:细胞(出列,或在创建后它),你应该调用setupWithItems:与单元格应该显示的新项目列表。
  3. 在你setupWithItems:实施,确保你从其父视图中删除UISegmentedControl。你可以很容易地做到这一点,分段控制存储为您的自定义单元格的属性。
  4. 在你setupWithItems:实现,创建一个新的UISegmentedControl,并把它添加到CustomCell的视图层次结构。

示例代码:

-(UITableViewCell*)tableView:(UITableView*)tableView cellForRowAtIndexPath:(NSIndexPath*)indexPath 
{ 
    CustomCell* cell = [tableView dequeueReusableCellWithIdentifier:kSomeIdentifier]; 

    if (!cell) 
    { 
     // Create a new cell 
    } 

    NSArray* currentCellItems = [self cellItemsForRow:indexPath.row]; 

    [cell setupWithItems:currentCellItems]; 

    return cell; 
} 

而在你CustomCell子类:

- (void)setupWithItems:(NSArray*)items 
{ 
    if (self.segmentedControl) 
    { 
     [self.segmentedControl removeFromSuperView]; 
     self.segmentedControl = nil; 
    } 

    // More setup... 

    UISegmentedControl *btn = [[UISegmentedControl alloc] initWithItems:[NSArray arrayWithObject:btn_title]]; 
    // set various other properties of btn 

    [cell.contentView addSubview:btn]; 
} 
+0

这可能会做到这一点,但我不是继承表格单元格,所以这对我的目的有点太过分了。 – SaltyNuts

相关问题