具有动态数据初始化的 UiTableviewCell 未正确加载

Posted

技术标签:

【中文标题】具有动态数据初始化的 UiTableviewCell 未正确加载【英文标题】:UiTableviewCell with dynamic data init not loading correctly 【发布时间】:2017-11-02 10:19:01 【问题描述】:

在我的单元格中,数据正在加载,但在我向下滚动之前它都一团糟,然后如果我正确地向后滚动所有格式。因此,当我加载的每个 uitableview 数据列表都被弄乱时,一旦我开始滚动并向上滚动,它就会就位并正确显示。请帮忙。

我的代码

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

    static NSString *CellIdentifier = @"Cell";
    UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:CellIdentifier];

    if (cell == nil) 
        cell = [[UITableViewCell alloc] initWithStyle:UITableViewCellStyleSubtitle reuseIdentifier:CellIdentifier];
    
    for(UIView *v in [cell subviews])
    
        if([v isKindOfClass:[UILabel class]])
            [v removeFromSuperview];
        if ([v isKindOfClass:[UIImageView class]])
            [v removeFromSuperview];
    
UIView *CellBGView = [[UIView alloc] initWithFrame:CGRectMake(10, 5, cell.frame.size.width-20, cell.frame.size.height-10)];
    CellBGView.backgroundColor = [UIColor whiteColor];

    UIImageView *divider = [[UIImageView alloc] initWithFrame:CGRectMake(CellBGView.frame.size.width-155,       CellBGView.frame.size.height-140, 150, 150)];
    divider.image = [UIImage imageNamed:@"icon_alpha.png"];
    [CellBGView addSubview:divider];
    ......
    return cell;

当我打开列表和滚动表格之前,这里会输出

这里是滚动后一切就位

【问题讨论】:

您应该使用自定义单元格,而不是标准单元格,并在情节提要中配置布局。而且你真的需要重新阅读 Apple 关于 TableViews 和 TableViewCells 的文档。 为什么要删除cellForRowAtIndexPath中的UILabelUIImage 如果你不重用子视图,在cellForRowAtIndexPath 中添加子视图是不合适的。每次用户滚动表格视图时,都会将更新和更新的分配视图添加到单元格中。从您的代码 sn-p 中,每次用户滚动时,CellBGViewdivider 将被分配并添加为子视图。 @trungduc 删除以避免重复 【参考方案1】:

我有一个解决方案。

首先,创建UITableViewCell的子类(例如,命名为DemoTableViewCell

DemoTableViewCellinitWithStyle 方法中,将图像和标签添加到单元格中。

cellForRowAtIndexPath 中,您不需要添加或删除图像和标签。只需为它们更改颜色或设置图像即可。

【讨论】:

以上是关于具有动态数据初始化的 UiTableviewCell 未正确加载的主要内容,如果未能解决你的问题,请参考以下文章

如何设置特定UITableViewCell的背景颜色

具有动态返回类型的表单输入

数据结构动态数组

vector

Echarts动态加载后台数据

Linux动态链接so初始化执行