2009-11-10 83 views

回答

1

可以支持檢查和使用的NSMutableSet跟蹤選定的權力的「權力」細胞取消選中。無論您使用Core Data還是其他一些方法將權力數據提供給UITableView,這都是有效的。

例如,在表中的數據源實現:

- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath { 
    // do usual stuff here including getting the cell 

    // determine the power from the IndexPath.row 

    if ([selectedPowerSet member:power]) 
    { 
     cell.accessoryType = UITableViewCellAccessoryCheckmark; 
    } else { 
     cell.accessoryType = UITableViewCellAccessoryNone; 
    } 

    return cell; 
} 

,並在表的委託(通常是相同的類)實現:

- (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath { 
    // determine the power from the IndexPath.row 

    if ([selectedPowerSet member:power]) { 
     [selectedPowerSet removeObject:power]; 
    } else { 
     [selectedPowerSet addObject:power]; 
    } 

    [tableView reloadData]; 
} 
+0

要存儲選中的權力,這在邏輯上起作用。但是如何保存列表的檢查狀態。我希望能夠回到清單並檢查,取消權力,並在主視圖中反映出來。 – monotreme 2009-11-12 19:41:50

+0

那麼,您需要使用selectedPowerSet的最終狀態來適當地設置您的數據模型。如果您使用的是核心數據,則可以調整超級英雄對象上的權力關係以匹配selectedPowerSet。 – gerry3 2009-11-12 20:38:28

1

如果要實現視圖層次結構,只需從導航項目開始。 Superhero tableview控制器是你的根控制器,而power tableview是一個子控制器。

在你的核心數據模型,你將有兩個實體,一個超級英雄實體和權力的實體。每個超級英雄實體都有一個名字,然後與電力實體有多對多的關係。權力實體將擁有一個名稱,並且(可選)與擁有權力的所有超級英雄實體有許多關係。 (並非真的需要,但在這種情況下,但良好的做法。)

超級英雄桌面視圖數據源將爲所有超級英雄實體進行提取,然後用每個超級英雄的名稱填充每個單元格的文本。當用戶點擊英雄時,超級英雄表格視圖會告訴navcontroller會推動堆棧上的power tableview,並將選定的超級英雄實體交給power tableview數據源。然後,強大的tableview數據源將使用超級英雄實體關係中的權力填充表格。它還會根據需要創建權力實體並將其添加到關係中。

如果您使用的數據量很小,則不需要爲此使用核心數據。你可以創建一個字典,其中每個鍵都是超級英雄的名字,每個值都是一個權力名稱數組。超級英雄tableview數據源將使用鍵填充,而power tableview數據源將使用值數組中的單個元素填充。

我建議你從UINavigationController開始。

+0

有道理。關於權力列表中權力的實際覈查或取消選中情況如何?我假設通過檢查,它會將實體添加到超級英雄,並通過取消選中它將刪除。 但如何預先填充電源列表與選中/未選中狀態? – monotreme 2009-11-10 18:41:44