2012-01-27 2 views
1

원격 이미지가 포함 된 UITableView에서 축소판을 채우는 데 SDWebImage를 사용해야 할 가능성이 충분히 있다는 것을 알기에 충분했습니다.자리 표시 자 로컬 이미지가있는 UITableView 원격 축소판 이미지

제 질문은 셀이 표시되고 SDWebImage가로드되기 전에 표시되는 각 셀에 기본 미리보기 이미지를 어떻게 표시 할 수 있습니까?

그리고 원격 이미지를 사용할 수없는 경우에도 기본 축소판이 표시되어야한다고 가정합니다.

조언/제안?

덕분에 모든

+0

왜 기본 이미지를 추가하지 않고 다른 이미지를 다운로드 할 때 상단에 그려야할까요? – ader

답변

1

처음에는 모든 셀을 기본 이미지로 설정할 수 있습니다. 그런 다음 콜백 위임을 사용하여로드 된 이미지를 갖도록 필요한 셀을 업데이트 할 수 있습니다. 현재 원격 영상 처리에는 JMImageCache을 사용하고 있습니다.

먼저 JMImageCache.h 및 JMImageCache.m 파일을 프로젝트에 추가하십시오. imageViewer라는 ImageViewer에서 이미지를 보유하고있는 CustomCell이라는 테이블에 사용자 정의 셀을 사용한다고 가정하고 CustomCell.h에서 JMImageCache.h 파일을 가져옵니다. 또한, 그것을 JMImageCacheDelegate하게있는 NSString의 이미지 URL 필드를 추가 할 CustomCell 인터페이스 업데이트 : 우리는 다음 셀의 이미지가 업데이트 될 수 있도록 이미지가 다운로드가 완료 될 때 처리 할 필요가

@interface CustomCell : UITableViewCell <JMImageCacheDelegate> 
{ 
NSString *image_url; 
... 
} 

// Also set image_url property fields so that it can be accessed from other files 

. image_url을 합성하고 다음을 CustomCell.m에 추가하십시오.

- (void) cache:(JMImageCache *)c didDownloadImage:(UIImage *)i forURL:(NSString *)url 
{ 
if ([url isEqualToString:image_url]) { 
    [self.imageViewer setImage:i]; 
    [self setNeedsLayout]; 
} 
} 

그런 다음 인덱스 경로 기능에서 행의 셀에있는 tableView를 가지고있는 파일 : 당신이 더 많은 도움이 필요하면

CustomCell *cell = (CustomCell*)[tableView dequeueReusableCellWithIdentifier:@"CustomCell"]; 
if (cell == nil) { 
    NSArray *topLevelObjects = [[NSBundle mainBundle] loadNibNamed:@"CustomCell" owner:nil options:nil]; 
    for (id currentObject in topLevelObjects) { 
     if ([currentObject isKindOfClass:[UITableViewCell class]]) { 
      cell = (CustomCell *)currentObject; 
      break; 
     } 
    } 
} 

[cell.imageViewer setImage:[UIImage imageNamed:"default.png"]]; 

//Code for getting string of URL you want for current cell called 'cell_image' 

[cell setImage_url:cell_image]; 
[cell.imageViewer setImage:[[JMImageCache sharedCache] imageForURL:image_url delegate:cell]]; 

JMImageCache는 GitHub의에 간단한 예제가 있습니다.

1

사과에서 게으른로드 된 이미지에 대한 정말 좋은 공식 예입니다 :

http://developer.apple.com/library/ios/#samplecode/LazyTableImages/index.html

아이디어는 처음에는 다운로드 및 시작이 없기 때문에 당신의 자리 표시 자 이미지를 설정, 간단는 그 필드에 대한 이미지를 다운로드 할 때, 콜백이 끝나면 tableViewController에 콜백되고 관련 indexPath의 관련 셀을 다시로드하면됩니다. 다운로드가 실패하면 콜백이 호출되지 않고 자리 표시 자 이미지가 영원히 남아있게됩니다.