dataModel
に格納されているsavedGames
配列から戻ってくるオブジェクトの種類に応じて、いくつかのカスタムUITableViewCellを返すようにしています。私の質問は、私はこれについて正しい方向に行くのですか?私はこれまでこれをやっておらず、私が正しい道を歩いていることを確かめたいと思っていました。cellForRowAtIndexPathから複数のUITableViewCellサブクラスを返す?
注:新しいセルは別の場所に割り当てられ、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;
}
EDIT:クイック質問は下に有用ではnilを返して、私はそれはメソッドが戻り値を持っていない回避知っているが、場合のどれもsがあなたが「取得するつもり火「場合」セルを返す必要があります "というエラーが表示されます。明らかに可能なすべてのオプションをカバーすることが重要ですが、最終的なリターンはデフォルト(バニラ)UITableViewCellを返す方が良いでしょうか? ... ちょっと興味があるんだけど。
私は建築的な観点から同意します。プロパティを設定します。 –
合意。その 'gameZone'を使って自動的にセル識別子を作ることもできます。この方法では、新しいゾーンを追加するときにテーブルコードを変更する必要はありません。または、適切なセルを返す 'GameZone'にカテゴリを追加することもできます(' return [genericGameAtRow tableViewCell] ')。ここでは、データモデルコードからUIKitを削除するためのカテゴリを使用します。すべてのきめ細かな解法があり、isKindOfClassより優れています。 –
私はそれを再因子付けしてgameZoneプロパティを追加することをお勧めします。ロブにもありがとう。 – fuzzygoat