0指数的图像超越

时间:2011-08-16 20:11:52

标签: iphone objective-c

我遇到了这个令人讨厌的问题。我的类是UITableViewController的子类,有一个调用

的方法
(UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath 

调用上述内容的方法是:

- (void) insertInfo:(UIImage *)image
{
self.hotelImage = nil;
self.hotelImage = image;
numRows = numRows + 1;
[self.tableView beginUpdates];
[self.tableView insertSections:[NSIndexSet indexSetWithIndex:0]  withRowAnimation:UITableViewRowAnimationFade];
[self.tableView endUpdates];
}

这就是我创建单元格的方式:

- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:  (NSIndexPath *)indexPath 
{
self.datacell = nil;
self.datacell = [[[UITableViewCell alloc] initWithStyle:UITableViewCellStyleValue1   reuseIdentifier:@"SimpleTableIdentifier"] autorelease];
self.myImageView = nil;
self.myImageView = [[UIImageView alloc] initWithImage:self.hotelImage];
[self.myImageView setFrame:CGRectMake(5, 5, 80, 75)];
[self.datacell.contentView addSubview:self.myImageView];
[self.myImageView release];
self.tableView.userInteractionEnabled = YES;
self.tableView.separatorColor = [UIColor clearColor];
return self.datacell;
}

所以,我的问题是当我滚动表格时,表格中的所有图像都被索引0处的单个图像替换。我的猜测是它与事实有关创建单元格时,该部分中的每个图像都被视为索引0,但在创建表格时会显示不同的图像。但是当用户滚动表格时,不同的图像会被第一个单元格的索引0中的图像所取代。

正是这样,当桌子开始滚动时,第一个单元格上的图像显示在所有单元格上。

我只是不知道如何在滚动表格时让每个单元格保留其唯一的图像。我的猜测是它与放置图像indexPath.section有关。但我不确定。有人可以帮我解决这个问题吗?

谢谢你, 胜者。

2 个答案:

答案 0 :(得分:0)

有效地,您使用insertInfo编辑表的内容,但不编辑其实际源,因此只要需要重绘这些单元格,它们就会恢复为原始源。尝试使用以下内容:

self.myImageView=[[UIImageView alloc] initWithImage:[myImageArray objectAtIndex:indexPath.row]];

答案 1 :(得分:0)

事实是tableView不会保留您的单元格。一旦你将它们滚出视图,它们就会消失,释放,根据你的知识解除分配,并且表格视图会询问数据新的替换单元格。您的cellForRowAtIndexPath始终返回相同的单元格,与表视图要求的内容无关。

您应该将发送到insertInfo的图像存储到数组中,然后在cellForRowAtIndexPath中,始终通过索引从数组返回图像,由indexPath.row和indexPath.section查找。每次滚动时,都会调用cellForRowAtIndexPath来获取屏幕上没有的所有新单元格,这就是单元格始终“更改为”发送到insertInfo的最新图像的原因。

尝试将新文件添加到项目,UITableViewController的子类,并检查其中的默认代码。你会发现dequeueReusableCellWithIdentifier也很有用。

这里的关键概念是cellForRowAtIndexPath:是问题,您的代码需要检查indexPath.section和indexPath.row的值,并返回属于该行/部分的值