2013-03-28 72 views
0

如果我有不同類型的細胞的表視圖每個具有其唯一的標識符,可以予找出哪些重用標識符indexPath涉及前我出列它在:如何識別代碼中的UITableViewCell?

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

如果存在另一方法,其可對細胞做一些反思也可以。

謝謝

回答

2

你可以,但你必須做所有的工作。檢查indexPath並確定爲特定單元格生成什麼類型​​的內容,然後是將這個類型的單元格出隊/創建,設置並返回它是您的工作。

你不能做反思的細胞,不過,因爲細胞不存在。這是-tableView:cellForRowAtIndexPath:的目的。你可能會接近這個

一種方式是有關於每個單元信息的字典數組(你需要每個表中的部分一個陣列,我只是假設有隻有一個部分)。在-tableView:cellForRowAtIndexPath:的開頭,您可以使用索引路徑中的行號將數組索引到數組中,然後檢查字典的值以確定何種類型的要出隊的單元以及如何設置它。

編輯:聽起來好像你可能會對細胞重用標識符是什麼以及它是如何生成有些疑惑。單元重用標識符是附加到tableview中的單元格的任意字符串。當你要求一個單元出隊時,tableview將檢查是否有任何具有該重用標識符的未使用單元可用。如果所有的單元格都是相同類型的單元格並且以相同的方式配置,那麼您將只有一個重用標識符,並且它可以是您選擇的任何字符串。只要確保您使用的字符串都在呼籲-dequeueReusableCellWithIdentifier:UITableViewCell-initWithStyle:reuseIdentifier:

-1
if(cell != nil)  
NSLog(@"%@", cell.reuseIdentifier); 
+1

你能解釋一下你的答案?一個簡單的總結會做。 – Popeye

+0

你有通過該方法傳遞的indexPath。你可以檢查單元標識符,然後做任何你想做的事情。例如:你可以使用switch-case語句。像開關(cell.reuseIdentifier){案例1:@「小區1」案例2:@「小區2」等} –

+0

我知道到底發生了什麼事,但我在你的答案意味着改善。只是在屏幕上放置一些代碼並不是最好的主意,而不是解釋原因。 – Popeye

0

最後,您有cellIds的鼻祖,讓他們到新創建的細胞tableView:cellForRowAtIndexPath:,所以你不應該需要問cellIds表視圖。完成你尋求最好的辦法是將函數添加到您的類:

-(NSString *)cellReuseIdForIndexPath:(NSIndexPath *)indexPath; 

功能可以查找cellIds在字典中,一個陣列,或通過任何其他的意思是你的願望。只要你需要它,只要它與表格視圖中的數據保持一致,就可以使用該功能。

0

您需要將數據存儲爲以indexpath你需要什麼類型的細胞,因爲reusabele標識符是從該小區所採摘重用池。

例如:如果

reusableidentifier = @"reuse"; then when 
-dequeueReusableCellWithIdentifier: 

使用的它從一個名爲池挑選一個細胞「重用」,如果電池是可以重複使用其他新的細胞產生。所以你不能找到哪個索引路徑屬於哪個可重用的標識符。