2014-03-12 166 views
0

我試圖爲子類UITableViewCell設置背景顏色。我知道通常我應該使用tableView:willDisplayCell:forRowAtIndexPath:。但是,我有一些邏輯來自定義tableView:cellForRowAtIndexPath:中的UITableViewCell的幾個方面,並且我想根據該邏輯設置單元格的背景顏色。我是否必須複製tableView:cellForRowAtIndexPath:中的所有條件(tableView:willDisplayCell:forRowAtIndexPath:)才能設置背景色?這種代碼重複似乎很浪費,可能不明智。UITableViewCell的條件背景顏色

我能想到的最好的解決方案是一個的UIColor屬性添加到UITableViewCell子類,設置它的基礎上出現的條件tableView:cellForRowAtIndexPath:,只是有tableView:willDisplayCell:forRowAtIndexPath:設置單元格的背景顏色爲它自己的顏色屬性。這是處理這種情況的正確方法嗎?它看起來有點笨重,但我想不出更好的東西。

回答

1

您可以創建函數返回合適的顏色,並據此設置它像

-(UIColor*)getColorForIndexPath:(NSIndexPath*){ 
    UIColor *cellColor=nil; 
    //Do whatever your logic is for finding appropriate color assign to cellColor 
    return cellColor; 
} 

現在使用此功能的setColor的,所以你必須修改只有1個發生在這兩個地方實現。

- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath { 
    .... //Your code for cell 

    cell.backgroundColor = [self getColorForIndexPath:indexPath]; 
} 

- (void)tableView:(UITableView *)tableView willDisplayCell:(UITableViewCell *)cell forRowAtIndexPath:(NSIndexPath *)indexPath{ 
    .... //Your code for cell 

    cell.backgroundColor = [self getColorForIndexPath:indexPath]; 
} 

注意:如果你只放置在任何的委託方法這將仍然有效,因此無需在2個地方打電話。

+0

剛剛移動重複代碼的位置。我在'tableView:cellForRowAtIndexPath:'中定義了條件邏輯,用於定製單元格的其他幾個方面,我試圖避免將這些條件複製到另一個方法中來設置背景顏色 – jobsbilly

+0

那麼您的問題是否已解決? –

+0

不,我試圖弄清楚是否有一種很好的方法可以避免代碼重複。這個解決方案導致代碼重複,因爲決定如何定製單元格的條件邏輯(包括背景顏色)需要在'tableView:cellForRowAtIndexPath:'中出現,例如標籤文本和按鈕函數,並且在'getColorForIndexPath :'你建議選擇合適的背景色。 – jobsbilly