在iphone中滚动表格时图像会发生变化吗?

时间:2011-06-13 11:44:15

标签: iphone objective-c cocoa-touch

我正在使用xml来获取数据并将其显示在uitable中。在XML中,我有一个单独的图像标记为“链接”。我将此图像显示为单元格图像。应用程序加载时一切正常,但是当我滚动表格时,单元格中的图像会发生变化。

- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath {

    static NSString *CellIdentifier = @"Cell";

    UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:CellIdentifier];
    if (cell == nil) 
    {
        cell = [[[UITableViewCell alloc] initWithStyle:UITableViewCellStyleSubtitle reuseIdentifier:CellIdentifier] autorelease];
        cell.accessoryType=UITableViewCellAccessoryNone;
        cell.selectionStyle=UITableViewCellSelectionStyleNone;
        //cell. separatorStyle=UITableViewCellSeparatorStyleNone;

        titleLabel = [[UILabel alloc] initWithFrame:CGRectMake(110, 10, 190, 130)];
        [titleLabel setTag:2];
        titleLabel.numberOfLines=7;
        [titleLabel setFont:[UIFont systemFontOfSize:14]];
        [titleLabel setTextColor:[UIColor blackColor]];
        [titleLabel setBackgroundColor:[UIColor clearColor]];
        [cell.contentView addSubview:titleLabel];
        [titleLabel release]; 


        imageView= [[UIImageView alloc] initWithFrame:CGRectMake(5, 20, 90, 110)];
        [cell.contentView addSubview:imageView];
    }

    NSDictionary *appRecord = [responseArr objectAtIndex:indexPath.row];

    NSString *urlLink;
    urlLink=[NSString stringWithFormat:@"%@",[appRecord objectForKey:@"link"]];
    NSLog(@"LINK : %@",urlLink);

    if([urlLink length] ==0)
    {
        imageView.image=[UIImage imageNamed:@"ioffer.png"];

    }
    else {

    NSData *imageData = [NSData dataWithContentsOfURL:[NSURL URLWithString:urlLink]];
    UIImage *image = [[UIImage alloc] initWithData:imageData];
    imageView.image = image;

    }   

    UILabel *desclbl = (UILabel*)[cell.contentView viewWithTag:2];
    desclbl.text = [NSString stringWithFormat:@"%@",[appRecord objectForKey:@"description"]];


    return cell;

}

我在表格的cellForRowAtIndexPath中使用了这些代码。 responseArr是我存储链接的数组。

任何人都可以帮我解决这个问题。

提前致谢 Malathi

4 个答案:

答案 0 :(得分:0)

我有同样的问题。滚动时,单元格在其他索引处重用。 尝试在“if(cell == nil)”之外放置用数据填充单元格的代码。为我工作。

祝你好运, 亚历山大

答案 1 :(得分:0)

如果重复使用现有的表视图单元格,即代码跳过第一个if-block,则imageView未初始化(无论如何都会声明它在哪里?)。这意味着即使您设置了新文本,也会重复使用一些随机图像。

修复方法是确保imageView在所有情况下都是初始化的。

请在此方法中在本地声明。其他一切对我来说都很危险。

答案 2 :(得分:0)

if (cell == nil)的“隐含的其他”是它正在重用表格缓存中的一个单元格。它没有重置任何关于那些的东西,只是拿起它们并使用它们。这意味着您在那里获得的任何元素都需要手动清除,特别是如果它们在填写之前需要一段时间。

你已经做了一些违约,在这里:

if([urlLink length] ==0)
{
    imageView.image=[UIImage imageNamed:@"ioffer.png"];

}

如果你只是做那个没有条件的 - 也就是说

    imageView.image=[UIImage imageNamed:@"ioffer.png"];

你会得到的是,你的单元格将加载其默认图像,然后当图像远程加载时它将替换它。

现在:你正在同步加载图片。这意味着您的整个UI将在Web请求发生时冻结。不太好。

答案 3 :(得分:0)

您也可以使用自定义单元格而不是每次单独检查 如以下示例所示 - 条件 -

    if(shout.creator.avatarImage){
        avatarView.image = shout.creator.avatarImage;
    }
    else{

        FetchImageOperation *operation = [[FetchImageOperation alloc] init];

        operation.delegate = self;
        operation.urlString = shout.creator.avatarURL;

        [operationQueue addOperation:operation];
        [operation release];
    }

-(void)fetchthumbImageOperation:(FetchThumbImageOperation *)operation didFetchImage:(UIImage *)image

{
    avatarView.image= image;

}

Here, i check the condition for image in tableview data source.

-(UITableViewCell *)tableView:(UITableView *)tv cellForRowAtIndexPath:(NSIndexPath *)indexPath 
{

}