Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/objective-c/26.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Objective c UITableViewCell会丢失其他单元格中的重复内容_Objective C_Ios_Uitableview - Fatal编程技术网

Objective c UITableViewCell会丢失其他单元格中的重复内容

Objective c UITableViewCell会丢失其他单元格中的重复内容,objective-c,ios,uitableview,Objective C,Ios,Uitableview,我有一个UITableView,当一个单元格与另一个单元格具有相同的内容时,该内容仅显示在las单元格中。我的自定义单元格添加UIView属性,以从其他类添加动态子视图 - (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath { static NSString *MyIdentifier = @"cell"; Co

我有一个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个UILabel组成:

  • 如果标签1是标题,则每行的标题都是唯一的->没问题,渲染良好
  • 如果标签2是一个类别,则从0到5的索引具有相同的类别->只有索引5处的行显示类别标签

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

谢谢你的时间和帮助

更新:


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

我将详细解释一下:

每次执行时,添加到collectionView属性的内容和UI控件可能会有所不同。在一次执行中,collectionView可以有一个UIImageView和一个UILabel,而在下一次执行中,它有两个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显示字符串,效果很好。

不应在块外添加子视图-

if (!cell) {
        cell = [[[CollectionCell alloc] initWithStyle:UITableViewCellStyleSubtitle 
                                  reuseIdentifier:MyIdentifier] 
                autorelease];
}
您的子视图只应添加到此块中(第一次创建可重用单元时)

当您上下滚动表格时,此“if”块之外(之后)发生的所有事情都会发生多次,因此您可以在此处编辑添加的子视图(仅在整个“if”块之外)


请参阅我的回答

“我无法在单元格实例化中创建此标签并添加为子视图,因为单元格内容都是动态的。”请对此展开,并显示您正在设置为集合视图的内容。CellForRowatinex路径是设置动态内容的位置。是的,我知道,但这对我无效,因为添加的子视图在每次执行或不同的单元格中都有不同的UI控件和内容,并且它们是在运行时定义的:(很抱歉,它不起作用。显示相同的行为,我怀疑UITableView工作正常,问题在于对生成的视图的引用……新内容隐藏旧内容……我不知道。是否有理由不使用[self.tableView reloadRowsAtIndexPaths:withRowAnimation:]?然后定制它?我不理解使用reloadRowsAtIndexPathds的目的…它将绘制与cellAtIndexPath相同的图形,对吗?真正的问题是,应该在2个celd中显示的字符串(独立于[super/sub]视图)只显示在最后一个celd绘制中。相同的子视图和不同的字符串可以正常工作。