UITableViewCell丢失了其他单元格中的重复内容

时间:2011-11-09 12:33:18

标签: objective-c ios uitableview

我有一个UITableView,当一个单元格具有与其他单元格相同的内容时,此内容仅出现在绘制的las单元格中。我的自定义单元格添加了一个UIView属性来添加来自其他类的动态子视图。

- (UITableViewCell *)tableView:(UITableView *)tableView
     cellForRowAtIndexPath:(NSIndexPath *)indexPath
{   
    static NSString *MyIdentifier = @"cell";

    CollectionCell *cell = (CollectionCell *)[tableView 
                         dequeueReusableCellWithIdentifier:MyIdentifier];
    if (!cell) {
        cell = [[[CollectionCell alloc] initWithStyle:UITableViewCellStyleSubtitle 
                                  reuseIdentifier:MyIdentifier] 
                autorelease];
    }

    [cell setCollectionView:/* Generated view in other class */];  

    return cell;
}

具体问题是:

我的动态视图由例如2个UILabels:

组成
  • 如果标签1是标题,则标题对于每一行是唯一的 - >没问题,写得很好。
  • 如果标签2是类别,则0到5的索引具有相同的类别 - >只有索引5处的行显示类别标签。

我无法在单元格实例化中创建此标签并添加为子视图,因为单元格内容都是动态的。

感谢您的时间和帮助。

更新

  

我无法在单元格实例化中创建此标签并添加为子视图,因为单元格内容都是动态的。

我将详细解释它:

添加到collectionView属性的内容和UI控件可以区分每次执行。在一个执行中,collectionView可以有一个UIImageView和一个UILabel,下一次执行它有2个UILabel(例如)。这就是为什么我不能创造像这样的东西

    if (!cell) {
        cell = [[[CollectionCell alloc] initWithStyle:UITableViewCellStyleSubtitle 
                                  reuseIdentifier:MyIdentifier] 
                autorelease];

        UILabel *foo = [[UILabel alloc] initWithFrame:SomeFrame];
        [foo setTag:101];
        [cell.collectionView addSubview:foo];
    }

    UILabel *foo = [cell.collectionView subviewWithTag:101];
    [foo setTitle:@"This content is dynamic"];

谢谢!

更新2:

似乎是自定义UILabel子类的问题。如果我使用原始UILabel来显示字符串工作正常。

1 个答案:

答案 0 :(得分:0)

您不应该在块外添加子视图 -

if (!cell) {
        cell = [[[CollectionCell alloc] initWithStyle:UITableViewCellStyleSubtitle 
                                  reuseIdentifier:MyIdentifier] 
                autorelease];
}

您的子视图只应添加到此块中(第一次创建 可重复使用的 单元格)。

当你向上和向下滚动你的表时,在这个'if'块之外发生的所有事情都发生了多次,这就是你编辑添加的子视图的地方(仅在整个'if block,在它之外)。

请参阅我的回答here