0

在我的故事板中,我有一个表格视图。我正在使用从 JSON 文件加载的数据(在 viewDidLoad 中加载)填充该表视图。

在我的 UITableView 中,我确实将“原型单元”设置为 1,这样我就可以轻松地选择一个附件。我的原型单元格有一个新视图的序列,需要显示所选项目的详细信息。

我正在使用以下程序以编程方式填充我的单元格:

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

    UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:videoTableIdentifier];

    if (cell == nil)
        cell = [[UITableViewCell alloc] initWithStyle:UITableViewCellStyleDefault reuseIdentifier:videoTableIdentifier];

    UILabel * title = [[UILabel alloc] initWithFrame:CGRectMake(40,5, 240,20)];
    [cell addSubview:title];
    [title setText:[[videos objectAtIndex:indexPath.row] objectForKey:@"title"]];

    UILabel * detail = [[UILabel alloc] initWithFrame:CGRectMake(40,28, 100,10)];
    [cell addSubview:detail];
    [detail setText:[NSString stringWithFormat:@"Year: %@", [[videos objectAtIndex:indexPath.row] objectForKey:@"year"]]];

    [cell addSubview:[[UIImageView alloc] initWithImage:[UIImage imageNamed:[[videos objectAtIndex:indexPath.row] objectForKey:@"image"]]]];

    return cell;
}

当我开始滚动时,会发生以下情况: 在此处输入图像描述

所以我开始寻找解决方案,发现我必须设置:dequeueReusableCellWithIdentifier:videoTableIdentifier为“nil”。

当我这样做时,这解决了我的问题,现在我的原型细胞附件和序列已经消失,所以我无法再导航到下一个视图。

我在互联网上找不到解决方案,所以我决定问这个。如果有人可以提供帮助,那就太棒了。

4

2 回答 2

6

您的问题是,每次重用单元格时,都会向其中添加新的子视图,因此,如果您有一个带有一些标签的单元格,并且您重用它并添加更多标签,所有这些都会出现重叠。

我建议您制作自己的带有标签的自定义 UITableViewCell,并且每次都更改标签的值。

于 2013-11-01T13:34:09.010 回答
0
if (!title){
    title = [[UILabel alloc] initWithFrame:CGRectMake(40,5, 240,20)];
    [cell addSubview:title];
} 
[title setText:[[videos objectAtIndex:indexPath.row] objectForKey:@"title"]];

以前的答案作者是对的。使用您自己的 UITableViewCell 子类可能会更好。
我没有看到任何内存释放。您是否使用自动引用计数?

于 2013-11-01T14:06:45.610 回答