2011-06-13 64 views
0

我正在使用xml獲取數據並將其顯示在可用表中。在XML中,我有一個單獨的圖像標籤作爲「鏈接」。我將這個圖像顯示爲單元格圖像。一切工作正常,當應用程序加載,但是當我滾動表格單元格中的圖像正在改變。在iPhone中滾動表格時圖像發生變化?

- (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

回答

0

我有同樣的問題。滾動時,單元格在其他索引處重用。 嘗試在「if(cell == nil)」之外放置用數據填充單元的代碼。爲我工作。

最好的問候, 亞歷山大

0

如果重用現有的表格視圖單元格,即代碼將跳過第一個如果塊,然後imageView未初始化(它在哪裏呢聲明?)。這意味着即使您設置了新文本,也會重用一些隨機圖像。

修正是爲了確保imageView在任何情況下都是初始化的。

請用這種方法在本地聲明它。其他一切對我來說都是非常危險的。

0

if (cell == nil)的「隱含的其他」是它重用了表的緩存中的單元格。它不會重置任何關於這些的東西,它只是撿起它們並使用它們。這意味着,你在那裏有任何元素都需要手動清除,尤其是如果這將是一段時間纔會在充滿之前

你已經做了一些違約,在這裏:

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

} 

如果你只是使NOT條件 - 即只說

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

什麼,你會得到的是,你的細胞會使用默認的圖像加載,那麼當圖像加載遠程它會取代它。

現在:你正在做同步加載圖像。這意味着您的整個用戶界面將在Web請求製作完成時凍結。不是很好。

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 
{ 

} 
+0

在這個例子中給予相同的,大約喊和創作者的一些細節如下─ – sandy 2011-06-14 05:49:45

+0

給出@interface創建者:NSObject And @interface Shout:NSObject sandy 2011-06-14 05:50:57

相關問題