我是开发iOS的半新手。 当我尝试自定义一个tableview单元格以将图像放在描述文本下时,它会起作用,直到我滚动,然后它就会搞砸了。
当我向下滚动,然后向上,图像在一个不应该在的单元格中。:/
我删除了代码,因为它无效。但我正在做的是用一个框架创建一个UIView,里面有一个UIImageView。然后我将它添加到cell.contentView。
哪个有效,直到我滚动。 那么有人可以帮忙:/
编辑:对于任何有兴趣的人来说,这就是它的样子,我让它发挥作用。 (谢谢乔纳森)
#define LEVEL_TAG 1
- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath {
static NSString *CellIdentifier = @"Cell";
UIImageView *showLevel;
UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:CellIdentifier];
if (cell == nil) {
cell = [[[UITableViewCell alloc] initWithStyle:UITableViewCellStyleSubtitle reuseIdentifier:CellIdentifier] autorelease];
showLevel = [[[UIImageView alloc] initWithFrame: CGRectMake(65, 50, 0, 11)] autorelease];
showLevel.tag = LEVEL_TAG;
[cell.contentView addSubview: showLevel];
} else {
showLevel = (UIImageView *)[cell.contentView viewWithTag:LEVEL_TAG];
}
NSDictionary *dictionary = [listOfItems objectAtIndex:indexPath.section];
NSArray *levelArray = [dictionary objectForKey:@"Levels"];
NSString *levelValue = [levelArray objectAtIndex:indexPath.row];
UIImage *levelImage = [UIImage imageWithContentsOfFile:[[NSBundle mainBundle] pathForResource: levelValue ofType:@"png"]];
CGImageRef starImage = levelImage.CGImage;
NSUInteger levelWidth = CGImageGetWidth(starImage);
showLevel.frame = CGRectMake(65, 50, levelWidth, 11);
showLevel.image = levelImage;
return cell;
}
答案 0 :(得分:0)
这是因为tableView重用旧单元格的方式,而不是每次用户滚动时创建新单元格,这会使一切变得更慢,效率更低。
在Apple文档中查看关于自定义UITableViewCells的Listing 5-3,它将向您展示如何在实际创建单元格的if语句中设置单元格,而不是单元格可以重用的位置。