2010-10-27 79 views
0

我添加了一個uiimageview作爲子視圖到我的cell.and然後在它的頂部放置一個標籤,使它看起來像一個按鈕。但whwn桌面向上或向下滾動圖像似乎得到再次畫。這變得非常醜陋,因爲我的圖像具有透明效果,一旦它出現並返回就會丟失。桌面視圖中的圖像

+0

發表您的cellForRowAtIndexPath方法。從看起來你錯誤地重複使用單元格。或者,更好的搜索 - 所以這裏有很多類似的問題 – Vladimir 2010-10-27 13:54:28

+1

您的問題中應該至少有一個問號:) – willcodejavaforfood 2010-10-27 13:54:44

+0

@Vladimir:我爲每個單元格使用了一個單獨的標識符。沒有幫助。我無法粘貼代碼作爲它的一部分我的工作\ – humblePilgrim 2010-10-27 14:55:03

回答

3

好吧,我會盡力去猜測你的代碼是什麼樣子:)

如果圖像是畫,這意味着你將它們添加了電池每次表視圖查詢數據源多次:

- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath { 
    UITableViewCell *cell = [tableView @"SomeID"]; 
    if (cell == nil) { 
     // Create cell 
    } 
    UIImageView *imView = ... //Create and initialize view 
    [cell.contentView addSubview:imView]; 
    ... 
    return cell; 
} 

因此,每當您的單元格出現在屏幕上(在用戶滾動表格後)圖像視圖的新實例被添加到單元格中。正確的做法是添加圖像視圖只有一次 - 創建細胞時,然後獲取和設置現有的圖像視圖:

- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath { 
    UITableViewCell *cell = [tableView @"SomeID"]; 
    if (cell == nil) { 
     // Create cell 
     UIImageView *imView = ... //Create and initialize view 
     imView.tag = 1000; // or any other int value 
     [cell.contentView addSubview:imView]; 
    } 
    UIImageView *iView = (UIImageView *)[cell.contentView viewWithTag:1000]; 
    iView.image = ...// set required image 
    ... 
    return cell; 
} 
每個小區由表重用查看現有的圖像視圖是時候

所以用這個方法填充適合當前行的圖像。

我爲每個單元使用了一個單獨的標識符。

通常它是不是一個好主意 - 在這種情況下,表將無法再利用其細胞和你可能會嚴重性能問題

+0

這是偉大的!它現在的工作。但是我做了一個改變。以後我添加圖像添加到imView創建時它本身仍然有效。爲什麼你以後添加圖像? – humblePilgrim 2010-10-28 04:55:52

+0

@Mithun - 稍後我添加了圖像,假設每個單元格可以具有不同的圖像,以便能夠爲任何行重新使用任何舊單元格。如果所有圖像都相同,則可以在單元創建時將其設置爲一次 – Vladimir 2010-10-28 05:48:29