簡體   English   中英

從 cellForRowAtIndexPath 返回多個 UITableViewCell 子類?

[英]Returning multiple UITableViewCell subclasses from cellForRowAtIndexPath?

我希望根據 object 的類型返回一些自定義 UITableViewCells 我從存儲在dataModel中的savedGames數組返回。 我的問題是,我這樣做是否正確? 我以前沒有這樣做過,只是想確保我走在正確的軌道上,不會遺漏一些明顯的東西。

注意:新單元格在別處分配和初始化,這就是下面代碼中未顯示的原因。

- (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 很有用,我知道它避免了沒有返回值的方法,但是如果沒有“if”s 觸發你會得到一個“必須返回一個單元格”錯誤。 顯然,涵蓋所有可能的選項很重要,但是最終返回不是更好地返回默認(香草) UITableViewCell 嗎? ... 只是好奇。

是的,這是一個正確的解決方案。

我個人會遠離-[id<NSObject> isKindOfClass:] ,因為它通常是不良架構的標志。 相反,我會在savedGames數組中的所有可能的類中添加一個gameZone屬性。 並明確要求它的區域/類型。

您顯示的代碼沒問題,是 go 的正確方法。

我對此很陌生,所以我可能是錯的,但是如果您的陣列中用於構建 uitableview 的每個項目都有自己的屬性來構建單元,那不是更好嗎?

所以你可以做類似的事情

- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath {
int row = [indexPath row];
[_myArray[row] formatCellAndSetData];

甚至可能

return [_myArray[row] buildCell];

您的每個自定義 uitableviewcell 類都將具有相同的方法 formatAndSetData 但每個都可以以不同的方式實現它。 這樣就沒有依賴於:

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

因為依賴項是從您的自定義 class 注入的。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM