[英]Table View Cell With Image
我有一個帶有兩個圖像視圖的表格視圖單元格,一個圖像視圖是一個占位符,另一個圖像的頂部是我從文檔目錄加載的實際圖像。 我有問題,當表格視圖重新使用單元格時,圖像顯示不正確。
我通過在單元格類中使用以下方法解決了我的問題,但是我已經讀到這可能會導致性能問題,對更好的解決方案有什么想法嗎?
- (void)prepareForReuse
{
[[self imageView] setImage:nil];
}
首先,您沒有像應該那樣調用[super prepareForReuse]
。
而且文檔非常清楚,您應該在tableView:cellForRowAtIndexPath:
設置圖像,因為它是內容。
如果在tableView:cellForRowAtIndexPath:
設置圖像,則在prepareForReuse
中將其設置為nil是沒有意義的。
想象以下流程。
prepareForReuse
將prepareForReuse
設置為nil tableView:cellForRowAtIndexPath:
使單元出隊並將imageView.image設置為image1 您要設置imageView.image兩次。
如果您使用nil,則可能根本不會影響性能。 但是您可能會想到實際上設置一個placeHolder圖像的想法。 因此,該單元已排隊並准備好重用,您可以設置占位符圖像; 之后,該單元將出隊,並且在甚至看不到占位符圖像之前,將占位符圖像替換為真實圖像。
我將完全刪除prepareForReuse
方法。 如果您在tableView:cellForRowAtIndexPath:
設置圖像,則不需要它tableView:cellForRowAtIndexPath:
從文檔中 :
如果UITableViewCell對象是可重用的(即,它具有重用標識符),則在從UITableView方法dequeueReusableCellWithIdentifier:返回對象之前,將調用此方法。 出於性能原因,您僅應重置與內容無關的單元格屬性,例如Alpha,編輯和選擇狀態。 重新使用單元格時,tableView:cellForRowAtIndexPath:中的表視圖委托應始終重置所有內容。 如果單元對象沒有關聯的重用標識符,則不會調用此方法。 如果重寫此方法,則必須確保調用超類實現。
由於此圖像視圖后面有一個占位符圖像 , 如果將頂部 圖像視圖 的圖像設置為nil , 則沒有任何錯誤。
為了增強圖像生成過程,您可以使用如下所示的NSCache對象,
1)
@property(nonatomic, strong) NSCache *imageCache;
2)在tableView cellForRowAtIndexPath:方法內部調用此方法,圖像生成過程可以移入該方法,
-(UIImage *) imageForIndexPathRow:(int) row{
id image = [self.imageCache objectForKey:[NSNumber numberWithInt:row]];
if(!image){//if the image is not in the cache,
UIImage *newImage; //create image here
[self.imageCache setObject:newImage forKey:[NSNumber numberWithInt:row]];
return newImage;
}
return (UIImage *) image;
}
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.