2013-08-26 51 views
0

我有一個tableview與單個自定義表格視圖單元格,隨着時間的推移導致了一個有點複雜的結構,我希望能夠簡化和改進它。基本上以目前的形式,在單元的左側和右側有圖像和按鈕,中間可能有兩個不同的標籤。如何重構UITableViewCell配置代碼?

單元格基於它們表示的條目,表視圖的部分和tableview的狀態進行配置,因此cellForRowAtIndexPath和willDisplayCell中的代碼都變得非常混亂。該配置包括隱藏/取消隱藏非標籤子視圖,並可能更改UILabels的框架。

你會如何建議構建和改進這樣的代碼,以及何時開始使用不同的自定義單元類?

回答

1

我會爲每個條目類型創建自定義子類。創建像

-(void)configureCell:(Entry *)entry 
{ 
    //do configuration stuff here 
} 

然後在你的cellForRowAtIndexPath上叫東西每個細胞亞類的方法,這樣做:

Entry *entry = self.entryArray[indexPath.row]; 
UITableViewCell *cell; 
switch(entry.entryType) 
{ 
    case EntryTypeOne: 
     CellTypeOne *cCell = (CellTypeOne *)[tableView dequeueReusableCellWithIdentifier:@"CellTypeOne" forIndexPath:indexPath 
     [cCell configureCell:entry]; 
     cell = cCell; 
     break; 
    case EntryTypeTwo: 
     CellTypeTwo *cCell = (CellTypeTwo *)[tableView dequeueReusableCellWithIdentifier:@"CellTypeTwo" forIndexPath:indexPath 
     [cCell configureCell:entry]; 
     cell = cCell; 
     break; 
} 

return cCell; 

只是一些想法,我真的不知道你的代碼是如何設置或你如何區分不同類型的條目。

+0

這聽起來不錯,喬納,你如何劃分自定義類的方式?例如我有一個按鈕,當用戶點擊時,將導致隱藏原始按鈕並取消隱藏不同的按鈕(選擇/取消選擇)。你會爲這些狀態中的每一個創建子類嗎? – x89a10

+1

你可以,但沒有必要。您可以讓按鈕單擊在您的條目中切換BOOL值,名稱與doClick類似,然後在configureCell邏輯中根據didClick的狀態隱藏/顯示UI元素。只需點擊按鈕以及設置didClick屬性,只需確保重新加載表格數據即可。就我個人而言,我會創建單獨的子類。使邏輯更簡單。 – JonahGabriel

+0

另一個小問題,就自定義單元格的操作而言,您會將它們定位到ViewController還是Cell並使用委派? – x89a10