2013-01-22 116 views
0

你好我想在我自定義單元格的CustomTableViewCell裏面使用EGOImageView。這是我使用EGOImageView的代碼。異步加載圖像裏面的uitableviewcell

- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath { static NSString* simpleTableIdentifier = @"Albums"; 

CustomTableCell* cell = (CustomTableCell*)[tableView dequeueReusableCellWithIdentifier:simpleTableIdentifier]; 

if (!cell) 
{ 
    cell = [[CustomTableCell alloc] initWithStyle:UITableViewCellStyleDefault reuseIdentifier:simpleTableIdentifier]; 

    NSLog(@"Show once or more times"); 
} 

NSDictionary* dictionary = (NSDictionary*)[self.albumCollection objectAtIndex:indexPath.row]; 

cell.label.text = [dictionary valueForKey:@"name"]; 

EGOImageView* imageView = [[EGOImageView alloc] initWithPlaceholderImage:[UIImage imageWithContentsOfFile:@""]]; 
[imageView setImageURL:[NSURL URLWithString:[NSString stringWithFormat:@"https://graph.facebook.com/%@/picture?type=small&access_token=%@", (NSString*)[dictionary valueForKey:@"id"], [[FBSession activeSession] accessToken]]]]; 
[imageView setFrame:CGRectMake(0.0f,0.0f,78.0f,78.0f)]; 


[cell.iView addSubview:imageView]; 
[imageView release]; 

加載相同圖像的每個單元格上的圖像。這是因爲它在加載圖像時重複使用了單元格。

我發現一個問題,我想不出爲什麼發生問題。我使用圖形API來抓取圖像https://graph.facebook.com/%@/picture?type=small&access_token=%@,其中第一個參數是相冊ID。

爲了讓我自己很容易看到問題,我只在單元格上使用了一張專輯,無論我使用的是哪張專輯,都使用了相同的照片。但是,當我將鏈接複製到瀏覽器時,地址欄上顯示的實際照片網址與顯示的圖像一起顯示,並顯示正確的照片。

有誰知道什麼是錯的。

+0

有沒有相同的URL傳遞給imageView的機會?請登錄圖片網址.. – HRM

+0

我已經檢查過,網址沒有問題 – LittleFunny

+0

您是否嘗試過檢查是否調用了EGOImageView的委託方法'imageViewLoadedImage'或'imageViewFailedToLoadImage'?它是否在所有單元格中顯示佔位符圖像? – HRM

回答

0

這裏是例子。它從後臺加載一些服務器的用戶照片並更新單元格圖像。請注意,imageView.image在開始處設置爲零。這是圓形的細胞重用的情況,以便您在下載時不會有圖像而不是錯誤的圖像。

還有一件事要補充的是,如果有一個緩存,這樣它就不會一直下​​載圖像。另一個好處是不要在邊緣網絡中下載圖像。

- (UITableViewCell *)tableView:(UITableView *)_tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath { 
static NSString *CellIdentifier = @"TransactionCell"; 
     NSMutableArray *data = searching ? searchResult : dataSource; 
     NSDictionary *object = [data objectAtIndex:[indexPath row]]; 

     UITableViewCell *cell = [_tableView dequeueReusableCellWithIdentifier:CellIdentifier]; 
     if (cell == nil) { 
       cell = [[[UITableViewCell alloc] initWithIdentifier:CellIdentifier] autorelease]; 
     } 
     cell.imageView.image = nil; 
     cell.textLabel.text = @"Your cell text"; 
     NSString *contact = @"[email protected]"; 
     dispatch_async(dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT, 0), ^{ 
         NSData *imgData = [appDelegate addUserPic:contact]; 
         if (imgData == nil && netStatus == ReachableViaWiFi) { 
           NSString *url = [NSString stringWithFormat:@"http://somehost.com/userpic/%@", contact]; 
           imgData = [NSData dataWithContentsOfURL:[NSURL URLWithString:url]]; 
         } 
         dispatch_async(dispatch_get_main_queue(), ^{ 
           UITableViewCell *updateCell = [self.tableView cellForRowAtIndexPath:indexPath]; 
           if (updateCell) { 
             if (imgData) { 
               [appDelegate setUserPic:contact imgData:imgData]; 
               updateCell.imageView.image = [UIImage imageWithData:imgData]; 
             } else { 
               updateCell.imageView.image = nil; 
             } 
             /* This forces the cell to show image as now 
              it has normal bounds */ 
             [updateCell setNeedsLayout]; 
           } 
         }); 
       }); 
     return cell; 
}