iOS 4.2:Tableview中的子视图表现得很奇怪

时间:2011-02-24 19:56:20

标签: iphone image uitableview uiview tableview

我是开发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;
}

1 个答案:

答案 0 :(得分:0)

这是因为tableView重用旧单元格的方式,而不是每次用户滚动时创建新单元格,这会使一切变得更慢,效率更低。

在Apple文档中查看关于自定义UITableViewCells的Listing 5-3,它将向您展示如何在实际创建单元格的if语句中设置单元格,而不是单元格可以重用的位置。