我當前的項目利用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以適當地填充數據。
再次感謝您的幫助!
如果您向我們展示混亂,我們可能會幫助您。但實際上,當你請求代碼審查工作中的一段代碼時,你應該在http://codereview.stackexchange.com上提出這個問題。 – vikingosegundo
也許你可以發佈你的結構虛擬,向我們展示它的問題。如果它純粹是鏈接的if/else語句的問題,那麼即使條件不是簡單的數字,也可以通過各種方法將其轉換爲開關或類似的東西。而且,當然,您可以始終將「重複」代碼段「提取」爲單獨的方法。 –