我期待返回根據對象的我從我savedGames
陣列回到儲存在我的dataModel
類型了許多定製UITableViewCells的。我的問題是,我正在以正確的方式進行討論?我之前沒有這樣做,只是想確保我在正確的軌道上不會錯過一些明顯的事情。從cellForRowAtIndexPath返回多個UITableViewCell子類?
注:新細胞的alloc-ED和init-ED的其他地方,這就是爲什麼未在下面的代碼所示。
- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath {
NSUInteger row = [indexPath row];
SharedDataModel *dataModel = [SharedDataModel sharedInstance];
id genericGameAtRow = [[dataModel savedGames] objectAtIndex:row];
if([genericGameAtRow isMemberOfClass:[GameZoneOne class]]) {
CellZoneOne *cell = [tableView dequeueReusableCellWithIdentifier:@"ZONEONE_ID"];
return cell;
}
if([genericGameAtRow isMemberOfClass:[GameZoneTwo class]]) {
CellZoneTwo *cell = [tableView dequeueReusableCellWithIdentifier:@"ZONETWO_ID"];
return cell;
}
return nil;
}
編輯:快速的問題是在底部有用返回nil,我知道這避免了沒有返回值的方法,但如果沒有「如果」的火你會得到一個「必須返回一個單元格「錯誤。顯然它的重要性在於涵蓋了所有可能的選項,但是最終返回不是更好地返回默認(香草)UITableViewCell嗎? ... 只是好奇。
我同意建築的觀點。設置一個屬性。 –
同意。你也可以使用'gameZone'來自動形成一個單元格標識符。這樣,當您添加新的區域時,您不需要更改表格代碼。或者...你可以給'GameZone'添加一個返回適當單元格的類('return [genericGameAtRow tableViewCell]')。我會在這裏使用一個類別來保持UIKit的東西不在數據模型代碼中。所有優良的解決方案,比'isKindOfClass'更好。 –
非常感謝,這是一個很好的觀點,我會重新考慮它並添加一個gameZone屬性。還要感謝Rob。 – fuzzygoat