2012-11-05 39 views
-1

我需要有白色背景爲偶數行和黑色的背景奇數行,我想到的是:UITableView(可添加或刪除行):使偶數/奇數行具有不同的顏色?

方法1: 屬性添加到細胞,表示小區的位置呈現的時候,這樣的細胞可以開關顏色, 或當我回到小區,我可以檢查它的位置並切換它的顏色

  • 這應該只是工作
  • 需要重新加載整個表一行時,刪除/添加

方法2: 添加可拉伸的背景圖像中,具有反覆黑白條,由於行高度是固定的,然後以某種方式使之與表

  • 這聽起來比方法1
  • 聰明滾動這可能需要有一個非常大的背景圖像,如果表視圖很大

有沒有其他的方式來做到這一點?

謝謝!

回答

4

爲什麼不通過檢查行是奇數還是偶數來設置背景。

- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath 
     { 
    ........ 
    if (indexPath.row % 2 == 0) //even 
    { 
    cell.backgroundView = [[UIImageView alloc]initWithImage:[UIImage imageNamed:@"Black"]]; 


    } 
    else 
    { 
    cell.backgroundView = [[UIImageView alloc]initWithImage:[UIImage imageNamed:@"White"]]; 
    } 
+0

儘管此代碼是合適的,但答案實際上並未處理插入或移除行的問題。添加或刪除行需要移動可見行的顏色。 – rmaddy

+0

你的意思是你想讓顏色在行滾動時保持不變?像第一個可見的行總是白色的第二個總是黑色的等等? – arundevma

+0

不需要考慮如果您在表格視圖中調用insertRowsAtIndexPaths:withRowAnimation:時會發生什麼情況,並添加一行。突然,插入點下面的所有偶數行都需要變成奇數行。簡單地調用'reloadData'就可以工作,但它會毀掉你插入的任何行動畫。 – rmaddy

0

是的,你可以檢查indexpath像indexpath%3 == 0,並添加背景色,以細胞爲方法1一樣cell.backroundcolor = [UIColor bluecolor];

並添加背景和圖像的細胞像方法2
cell.bakgroundView = [UIImageview alloc]inithWitImage:[UIImage [email protected]"cellBG.png"]];

1

所有的迄今爲止的其他答案似乎忽略了與插入和刪除行有關的問題。

我認爲最簡單的方法是插入或刪除一行時,重新加載插入/刪除點下面的所有可見行。沒有必要處理可見範圍以下的行。

比方說,你有100行,你正在查看行20-30。偶數行如你所述是白色的。現在,如果在第35行插入/刪除一行,則無法執行任何操作,因爲所有受影響的行都不在屏幕上。如果在第25行插入/移除行,它將立即以正確的顏色顯示。您現在需要重新加載第26-30行,以便使用適當的新顏色進行更新。如果行在第15行插入/刪除,則需要重新加載第20-30行(所有可見的行)。

如果需要,您可以進行一些優化。例如,如果添加了兩行(比如說15和16,那麼就沒有任何事情可做)

基本算法是在插入/刪除後調用[tableView indexPathsForVisibleRows],然後重新加載每個路徑,如果路徑是在插入/刪除索引路徑後

+0

如果我重新加載和刪除行,動畫將如何顯示? – hzxu

+0

取決於您選擇與'UITableView reloadRowsAtIndexPaths:withRowAnimation:'方法一起使用的動畫。您不重新加載整個表格,因此插入/刪除的動畫不應受到影響。 – rmaddy

+0

讓我質疑一下。當我們重新加載一個表時,只有可見的行纔會重新加載rt?那麼,爲什麼我們需要優化? – arundevma

相關問題