Табличное представление, отображающее различные изображения при прокрутке - PullRequest
0 голосов
/ 16 июня 2011

Я загружаю некоторые изображения в виде таблицы одним нажатием кнопки. Изображения загружаются нормально и в нужных местах. Но когда я прокручиваю вид таблицы, изображения, кажется, меняются. Позвольте мне уточнить, только 2 строки видныизначально в моем табличном представлении, и давайте предположим, что изображения присутствуют как в строках, так и в 4 изображениях в строке. Теперь, когда я прокручиваю табличное представление вниз или вверх, строка, прокручиваемая выше или ниже рамки табличного представления, покажет новое изображение.в его изображении. И каждый раз, когда я прокручиваю, изображения продолжают изменяться. В этом может быть причина. Я чешу голову этим. Пожалуйста, помогите. Я публикую часть своего кода: -

-(UITableViewCell*)tableView(UITableView*)
ableViewcellForRowAtIndexPath(NSIndexPath*)indexPath {

    UITableViewCell *cell = nil;
    static NSString *AutoCompleteRowIdentifier = @"AutoCompleteRowIdentifier";
    cell = [tableView dequeueReusableCellWithIdentifier:AutoCompleteRowIdentifier];
    if (cell == nil) {
        cell=[[[UITableViewCellalloc]initWithStyle:UITableViewCellStyleDefaultreuseIdentifier:AutoCompleteRowIdentifier] autorelease];

    }
    UIImageView * imageView1 = [[[UIImageView alloc] initWithFrame:CGRectMake(25, 4, 80, 80)] autorelease];
    UIImageView * imageView2 = [[[UIImageView alloc] initWithFrame:CGRectMake(115,4,80, 80)] autorelease];
    UIImageView * imageView3 = [[[UIImageView alloc] initWithFrame:CGRectMake(205,4, 80, 80)] autorelease];
    UIImageView * imageView4 = [[[UIImageView alloc] initWithFrame:CGRectMake(295,4, 80, 80)] autorelease];
    imageView1.tag = 1;
    imageView2.tag = 2;
    imageView3.tag = 3;
    imageView4.tag = 4;
    [cell.contentView addSubview:imageView1];
    [cell.contentView addSubview:imageView2];
    [cell.contentView addSubview:imageView3];
    [cell.contentView addSubview:imageView4];

     UIImageView * imageView;
    for ( int i = 1; i <= 4; i++ ) {
        imageView = (UIImageView *)[cell.contentView viewWithTag:i];
        imageView.image = nil;

    }

    int photosInRow;
    if ( (indexPath.row < [tableView numberOfRowsInSection:indexPath.section] - 1) ||
        (count % 4 == 0) ) {
        photosInRow = 4;
    } else {
        photosInRow = count % 4;
    }

    for ( int i = 1; i <= photosInRow; i++ ) {
        imageView = (UIImageView *)[cell.contentView viewWithTag:i];

        [self setImage1:imageView];

    }

    return cell;
} 


-(void)setImage1:(UIImageView *)imageView
{

    UIImageView *imageView1=[[UIImageView alloc]init];

    imageView1=imageView;
    imageView1.image = [UIImage imageNamed:[NSString stringWithFormat:@"%d.png", j]];

    j++;

}

Любая помощь будет оценена.

Спасибо, Кристи

Ответы [ 2 ]

1 голос
/ 16 июня 2011

Ваш метод setImage1: должен быть изменен для учета индекса фотографий, так как j не является правильным способом отслеживания текущего изображения, так как cellForRowAtIndexPath: может вызываться в любом порядке.

- (void)setImage1:(UIImageView *)imageView forPhotoIndex:(NSInteger)index {
    imageView.image = [UIImage imageNamed:[NSString stringWithFormat:@"%ld.png", index]];
}

и незначительное изменение в cellForRowAtIndexPath: будет,

[..]
for ( int i = 1; i <= photosInRow; i++ ) {
    imageView = (UIImageView *)[cell.contentView viewWithTag:i];
    [self setImage1:imageView forPhotoIndex:(indexPath.row * 4 + i - 1)];
}
[..]
0 голосов
/ 16 июня 2011

При повторном использовании ячейки вы просто добавляете новые экземпляры UImageView.Повторно использованная ячейка уже имеет добавленные подпредставления, и вы просто добавляете больше.Обязательно добавляйте новые UIImageViews, только если ячейка не использовалась ранее (в условии if)

if (cell == nil) {
    cell=[[[UITableViewCellalloc]initWithStyle:UITableViewCellStyleDefaultreuseIdentifier:AutoCompleteRowIdentifier] autorelease];

    UIImageView * imageView1 = [[[UIImageView alloc] initWithFrame:CGRectMake(25, 4, 80, 80)] autorelease];
    UIImageView * imageView2 = [[[UIImageView alloc] initWithFrame:CGRectMake(115,4,80, 80)] autorelease];
    UIImageView * imageView3 = [[[UIImageView alloc] initWithFrame:CGRectMake(205,4, 80, 80)] autorelease];
    UIImageView * imageView4 = [[[UIImageView alloc] initWithFrame:CGRectMake(295,4, 80, 80)] autorelease];
    imageView1.tag = 1;
    imageView2.tag = 2;
    imageView3.tag = 3;
    imageView4.tag = 4;
    [cell.contentView addSubview:imageView1];
    [cell.contentView addSubview:imageView2];
    [cell.contentView addSubview:imageView3];
    [cell.contentView addSubview:imageView4];
}

РЕДАКТИРОВАТЬ: См. Комментарии ниже о проблемах при настройке фактического изображения.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...