2013-05-11 102 views
1

我有一個帶有兩個圖像視圖的表格視圖單元格,一個圖像視圖是一個佔位符,另一個圖像的頂部是我從文檔目錄加載的實際圖像。當表格視圖重新使用單元格時,我遇到圖片被錯誤顯示的問題。帶圖像的表格視圖單元格

我在單元類中使用下面的方法解決了我的問題,但是我已經讀過這可能會導致性能問題,任何有關更好解決方案的想法?

- (void)prepareForReuse 
{ 
    [[self imageView] setImage:nil]; 
} 
+0

你好,你可以在這裏上傳整個代碼。那麼我可能會幫助你.. – 2013-05-11 16:04:06

+1

你在哪裏讀到的? – Wain 2013-05-11 16:05:59

+1

這是整個代碼,它只是清除圖像視圖。 – Vikings 2013-05-11 16:06:51

回答

2

第一個總之,你不會像你應該那樣打電話給[super prepareForReuse]

而且文檔非常清晰,您應該在tableView:cellForRowAtIndexPath:中設置圖像,因爲它的內容。
如果您在tableView:cellForRowAtIndexPath:中設置圖像,則無法在prepareForReuse中將其設置爲零。

想象下面的流程。

  1. 向下滾動,單元格0放到隊列中。
  2. prepareForReuse套imageView.image爲零
  3. tableView:cellForRowAtIndexPath:隊列中取出細胞,並設置imageView.image到圖像1

要設置imageView.image兩次。

如果您使用零,則可能根本沒有可衡量的性能影響。但是您可能會想出實際設置placeHolder圖像的方法。因此,單元格已排隊並準備好重用,您可以設置佔位符圖像;稍後,該單元格將被取出,並且佔位符圖像在佔位符圖像甚至可見之前被替換爲真實圖像。

我會完全刪除prepareForReuse方法。你不需要它,如果你在tableView:cellForRowAtIndexPath:


documentation設置圖像:

如果一個UITableViewCell對象是可重複使用的,也就是說,它有一個複用標識符調用此方法就在從UITableView方法dequeueReusableCellWithIdentifier返回對象之前。出於性能方面的原因,您應該只重置與內容無關的單元格屬性,例如alpha,編輯和選擇狀態。 tableView:cellForRowAtIndexPath:中的表視圖委託應該在重用單元時始終重置所有內容。如果單元對象沒有關聯的重用標識符,則不調用此方法。如果您重寫此方法,則必須確保調用超類實現。

+0

_「..你應該只重置與內容無關的單元格的屬性...... 「_ _內容是什麼意思?我應該在'prepareForReuse'還是'tableView:cellForRowAtIndexPath:'中更改單元格的標籤文本?我應該在哪裏設置,例如,某些單元格視圖的'hidden'屬性? – 2015-12-17 07:58:11

0

既然你有這樣的圖像視圖後面的佔位符圖像,有沒有錯,如果你頂的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; 
} 
+0

I 'm已經使用NSCache,只是想確保我沒有做一些會導致性能問題的東西 – Vikings 2013-05-11 16:21:59

+0

然後,沒問題:) – 2013-05-11 16:23:00

相關問題