iOS 4.2: Subview в Tableview ведет себя странно - PullRequest
0 голосов
/ 24 февраля 2011

Я немного новичок в разработке для iOS. И когда я пытаюсь настроить ячейку табличного представления, чтобы поместить изображение под текст описания, это работает, пока я не прокручиваю, тогда это все перепутано.

Когда я прокручиваю вниз, а затем назад, изображение находится в ячейке, в которой оно не должно быть.: /

Я удалил код, потому что он не работал. Но то, что я делал, создавало 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 голосов
/ 24 февраля 2011

Это связано с тем, что tableView повторно использует старые ячейки, а не создает новые каждый раз, когда пользователь выполняет прокрутку, что сделает все медленнее и менее эффективным.

Посмотрите на Перечисление 5-3 в документации Apple по настройке UITableViewCells, в ней показано, как настроить ячейку, в операторе if, где ячейка фактически создана, а не там, где клетка могла быть использована повторно.

...