iPhone sdk UITableView 单元重用标识符
Posted
技术标签:
【中文标题】iPhone sdk UITableView 单元重用标识符【英文标题】:iPhone sdk UITableView cell reuse identifier 【发布时间】:2013-02-01 11:10:31 【问题描述】:我正在使用 UITableView。下载一本书后,我将在我的表格中添加一个复选标记图像。我已经做到了。但是,当我滚动我的表格时,即使对于未下载的书籍(即)我的表格单元格被重复使用,我也会得到图像。为此,我用谷歌搜索并检查了我的代码。一切似乎都一样。这是我的代码,
- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath
UIImage *cellImage= [cacheImage getCachedImage:[listOfThumImages objectAtIndex:indexPath.row]];
if(cellImage == nil)
DeviantDownload *download;
download = [DownloadsArray objectAtIndex:indexPath.row];
cellImage = download.image;
if (cellImage == nil)
download.delegate = self;
NSLog(@"cellImage%@",cellImage);
UIImageView *imgView;
static NSString *CellIdentifier = @"";
cell = [tableView dequeueReusableCellWithIdentifier:CellIdentifier];
if (cell == nil)
cell = [[UITableViewCell alloc]initWithStyle:UITableViewCellStyleDefault reuseIdentifier:CellIdentifier];
imgView1 = [[UIImageView alloc] initWithFrame:CGRectMake(680, 60, 40, 40)];//self.view.bounds.size.width-
[imgView1 setImage:[UIImage imageNamed:@"Downloaded.png"]];
NSUserDefaults *defaults = [NSUserDefaults standardUserDefaults];
if([defaults objectForKey:@"firstRun"])
if([[[appDelegate selectDB] valueForKey:@"bookname"] containsObject:[listOfBooks objectAtIndex:indexPath.row]] )
NSString *cellValue = [listOfBooks objectAtIndex:indexPath.row];
cell.contentView addSubview:imgView1];
return cell;
我的代码有什么问题?请帮帮我。谢谢你。
【问题讨论】:
您正在重用带有图像的单元格。因此图像仍然存在,因为您没有告诉视图控制器在重用单元格时图像不应该存在。 因为我只需要下载后的图像,我在那里添加。那么我怎么能避免重复使用我的图像呢?符合这个标准? 最简单的方法是创建UITableViewCell
的子类并将下载图像视图作为该类的属性。然后在 cellForRow 中将图像设置为 Downloaded.png 以显示它或设置为 nil 以隐藏它。
你能用示例代码详细解释一下吗?我是这个平台的新手。
不,抱歉。您必须询问您选择的搜索引擎。
【参考方案1】:
如果您希望某个单元格不显示图像,则只需删除该单元格的图像视图即可。为图像视图设置一个 view.tag,然后检索它,然后将其删除。
您现在要做的是在需要时为单元格添加图像子视图,然后将该单元格重新用于所有其他行。但是您从未删除不需要它的单元格的 imageview。
【讨论】:
你能详细解释一下吗? 你不明白什么? 我能理解,但如果你用示例代码或详细解释我会清楚。【参考方案2】:带有UITableView
的复选标记并不像看起来那么复杂。首先,您必须保存已经有书签的行的状态。并且,在您的 cellForRowAtIndexPath
方法中进行比较。您可以在NSMutableArray
上创建。为下载的书保存 1,为未下载的书保存 0。在您的 cellForRowAtIndexPath
方法中比较 [array objectAtIndex:indexpath.row] 并相应地设置图像。
另外,改变:
static NSString *CellIdentifier = @"";
收件人:
static NSString *CellIdentifier = @"MyCell";
【讨论】:
以上是关于iPhone sdk UITableView 单元重用标识符的主要内容,如果未能解决你的问题,请参考以下文章
分组UITableView,多个部分在iPhone SDK中创建问题
iphone sdk:无法重复使用viewWithTag的单元格(无法将setText重用于重复使用的标签)