簡體   English   中英

帶有圖像的表格視圖單元格

[英]Table View Cell With Image

我有一個帶有兩個圖像視圖的表格視圖單元格,一個圖像視圖是一個占位符,另一個圖像的頂部是我從文檔目錄加載的實際圖像。 我有問題,當表格視圖重新使用單元格時,圖像顯示不正確。

我通過在單元格類中使用以下方法解決了我的問題,但是我已經讀到這可能會導致性能問題,對更好的解決方案有什么想法嗎?

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

首先,您沒有像應該那樣調用[super prepareForReuse]

而且文檔非常清楚,您應該在tableView:cellForRowAtIndexPath:設置圖像,因為它是內容。
如果在tableView:cellForRowAtIndexPath:設置圖像,則在prepareForReuse中將其設置為nil是沒有意義的。

想象以下流程。

  1. 向下滾動,將單元格0放入隊列。
  2. prepareForReuseprepareForReuse設置為nil
  3. 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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM