在我的故事板中,我有一个表格视图。 我正在使用从JSON文件加载的数据(在viewDidLoad中加载)填充该表视图。
在我的UITableView中,我确实将“原型单元格”设置为1,因此我可以轻松选择附件。 我的Prototype Cell有一个Seque到一个新视图,需要显示所选项目的详细信息。
我正在以编程方式填充我的单元格:
- (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”。
虽然我这样做了,但这解决了我的问题,但是现在我的Prototype Cell Accessory和Seque已经不见了,所以我无法再导航到下一个视图了。
我无法在互联网上找到解决方案,所以我决定问这个问题。 如果有人可以提供帮助,那会很棒。
答案 0 :(得分:6)
您的问题是,每次重新使用单元格时,都会向其添加新的子视图,因此如果您有一个带有某些标签的单元格,并且重复使用它并添加更多标签,则所有标签都会重叠。< / p>
我建议您制作带有标签的自定义UITableViewCell,每次只更改标签的值。
答案 1 :(得分:0)
if (!title){
title = [[UILabel alloc] initWithFrame:CGRectMake(40,5, 240,20)];
[cell addSubview:title];
}
[title setText:[[videos objectAtIndex:indexPath.row] objectForKey:@"title"]];
以前的答案作者是对的。使用您自己的UITableViewCell子类可能更好 我没有看到任何内存释放。你在使用自动引用计数吗?