开发者

iOS 4.2: Subview in Tableview acting weird

开发者 https://www.devze.com 2023-02-13 01:47 出处:网络
I\'m semi new to developing for iOS. And when i try to customize a tableview cell to put an image under the description text, it works, until i scroll, then it gets all messed up.

I'm semi new to developing for iOS. And when i try to customize a tableview cell to put an image under the description text, it works, until i scroll, then it gets all messed up.

When i scroll down, then back up, the image is in a cell it shouldn't be in. :/

I deleted the code because it wasn't working. But what i was doing was creating a UIView with a frame, with a UIImageView inside it. Then i add it to cell.contentView.

Which works, until i scroll. So could someone please help :/

Edit: here is what it looks like for anyone interested, i got it working. (Thanks Jonathan)

    #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] pathForResourc开发者_StackOverflow中文版e: levelValue ofType:@"png"]];
        CGImageRef starImage = levelImage.CGImage;
        NSUInteger levelWidth = CGImageGetWidth(starImage);
        showLevel.frame = CGRectMake(65, 50, levelWidth, 11);
        showLevel.image = levelImage;

        return cell;
}


It's because of the way the tableView reuses old cells, rather than creating new ones every time the user scrolls, which would make everything slower, and less efficient.

Have a look at Listing 5-3 on the Apple Documentation about customizing UITableViewCells, it shows you how to set up the cell, within the if statement where the cell is actually created, and not where the cell could have been reused.

0

精彩评论

暂无评论...
验证码 换一张
取 消

关注公众号