我有一個帶有兩個圖像視圖的表格視圖單元格,一個圖像視圖是一個佔位符,另一個圖像的頂部是我從文檔目錄加載的實際圖像。當表格視圖重新使用單元格時,我遇到圖片被錯誤顯示的問題。帶圖像的表格視圖單元格
我在單元類中使用下面的方法解決了我的問題,但是我已經讀過這可能會導致性能問題,任何有關更好解決方案的想法?
- (void)prepareForReuse
{
[[self imageView] setImage:nil];
}
我有一個帶有兩個圖像視圖的表格視圖單元格,一個圖像視圖是一個佔位符,另一個圖像的頂部是我從文檔目錄加載的實際圖像。當表格視圖重新使用單元格時,我遇到圖片被錯誤顯示的問題。帶圖像的表格視圖單元格
我在單元類中使用下面的方法解決了我的問題,但是我已經讀過這可能會導致性能問題,任何有關更好解決方案的想法?
- (void)prepareForReuse
{
[[self imageView] setImage:nil];
}
第一個總之,你不會像你應該那樣打電話給[super prepareForReuse]
。
而且文檔非常清晰,您應該在tableView:cellForRowAtIndexPath:
中設置圖像,因爲它的內容。
如果您在tableView:cellForRowAtIndexPath:
中設置圖像,則無法在prepareForReuse
中將其設置爲零。
想象下面的流程。
prepareForReuse
套imageView.image爲零tableView:cellForRowAtIndexPath:
隊列中取出細胞,並設置imageView.image到圖像1要設置imageView.image兩次。
如果您使用零,則可能根本沒有可衡量的性能影響。但是您可能會想出實際設置placeHolder圖像的方法。因此,單元格已排隊並準備好重用,您可以設置佔位符圖像;稍後,該單元格將被取出,並且佔位符圖像在佔位符圖像甚至可見之前被替換爲真實圖像。
我會完全刪除prepareForReuse
方法。你不需要它,如果你在tableView:cellForRowAtIndexPath:
從documentation設置圖像:
如果一個UITableViewCell對象是可重複使用的,也就是說,它有一個複用標識符調用此方法就在從UITableView方法dequeueReusableCellWithIdentifier返回對象之前。出於性能方面的原因,您應該只重置與內容無關的單元格屬性,例如alpha,編輯和選擇狀態。 tableView:cellForRowAtIndexPath:中的表視圖委託應該在重用單元時始終重置所有內容。如果單元對象沒有關聯的重用標識符,則不調用此方法。如果您重寫此方法,則必須確保調用超類實現。
_「..你應該只重置與內容無關的單元格的屬性...... 「_ _內容是什麼意思?我應該在'prepareForReuse'還是'tableView:cellForRowAtIndexPath:'中更改單元格的標籤文本?我應該在哪裏設置,例如,某些單元格視圖的'hidden'屬性? – 2015-12-17 07:58:11
既然你有這樣的圖像視圖後面的佔位符圖像,有沒有錯,如果你頂的ImageView圖像設爲零。
爲了提高圖像生成處理中,可以使用一個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;
}
I 'm已經使用NSCache,只是想確保我沒有做一些會導致性能問題的東西 – Vikings 2013-05-11 16:21:59
然後,沒問題:) – 2013-05-11 16:23:00
你好,你可以在這裏上傳整個代碼。那麼我可能會幫助你.. – 2013-05-11 16:04:06
你在哪裏讀到的? – Wain 2013-05-11 16:05:59
這是整個代碼,它只是清除圖像視圖。 – Vikings 2013-05-11 16:06:51