2013-08-30 64 views
0

我當前的項目利用DetailViewController來顯示有關主表中的特定對象的詳細信息。詳細的tableview是動態的,儘管行數有限。雖然我事先知道所有可能的行,但根據用戶設置的偏好,有些行進出表格。我的問題是tableView:cellForRowAtIndexPath:方法。巨大的if/else在tableView:cellForRowAtIndexPath

每行對於它所呈現的數據都非常具體,因此沒有重複的行。

因此,正如您可能已經從標題中猜到的那樣,這在我的tableView:cellForRowAtIndexPath:方法中導致了一個巨大的if/else塊,我試圖實現哪些數據在什麼單元格中進行。

有關如何更好地執行此操作的任何建議?這是一個可怕的代碼...

在此先感謝!編號1: 感謝您的幫助! 雖然看起來我並沒有很好地解釋自己。

下面是一些代碼,以幫助解釋

- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath { 

    NSArray *section = [self.sectionsMutable objectAtIndex:indexPath.section]; 

    NSString *cellID = [section objectAtIndex:indexPath.row]; 

    UITableViewCell *cell = nil; 
    if ([cellID isEqualToString:@"titleCell"]) { 
     TitleCell *titleCell = (TitleCell *)[tableView dequeueReusableCellWithIdentifier:cellID]; 
     titleCell.title = self.reminder.title; 
     cell = titleCell; 
    } 
    else if ([cellID isEqualToString:@"SwitchCell"]) { 
     SwitchCell *switchCell = (SwitchCell *)[tableView dequeueReusableCellWithIdentifier:cellID]; 
     switchCell.on = self.alertOn; 
     cell = switchCell; 
    } 
    else if 
     ... 

} 

正如你所看到的,公司都存儲在一個二維數組和輕鬆的CellID抓住在運行時。填充單元格的數據來自EKReminder對象。

問題是我必須檢查每個可能的CellId以適當地填充數據。

再次感謝您的幫助!

+1

如果您向我們展示混亂,我們可能會幫助您。但實際上,當你請求代碼審查工作中的一段代碼時,你應該在http://codereview.stackexchange.com上提出這個問題。 – vikingosegundo

+0

也許你可以發佈你的結構虛擬,向我們展示它的問題。如果它純粹是鏈接的if/else語句的問題,那麼即使條件不是簡單的數字,也可以通過各種方法將其轉換爲開關或類似的東西。而且,當然,您可以始終將「重複」代碼段「提取」爲單獨的方法。 –

回答

1

感謝您的更新。如果您嘗試在表格視圖中使用2個或更多不同的表格視圖單元格,我不會看到這樣的代碼有任何問題。如果你想很好地分解你的代碼,你可以用不同的方法替換單元初始化。例如:

(UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath { 

    NSArray *section = [self.sectionsMutable objectAtIndex:indexPath.section]; 

    NSString *cellID = [section objectAtIndex:indexPath.row]; 

    UITableViewCell *cell = nil; 
    if ([cellID isEqualToString:@"titleCell"]) { 
     [self initTitleCell]; 
    } 
    else if ([cellID isEqualToString:@"SwitchCell"]) { 
     [self initSwitchCell]; 
    } 

} 
+0

感謝您的幫助!爲了清晰起見更新了問題。 – user1869469