0

indexPath如果我有一个表格视图,其中包含不同类型的单元格,每个单元格都有其唯一标识符,我是否可以在将其出列之前找出与哪个重用标识符相关:

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

如果有另一种方法可以对单元格进行某种反射,那也可以。

谢谢

4

4 回答 4

2

你可以,但你必须做所有的工作。您的工作是检查 indexPath 并确定您为特定单元格生成的内容类型,然后出列/或创建该类型的单元格,设置它并返回它。

但是,您不能对单元格进行反射,因为该单元格还不存在。这就是-tableView:cellForRowAtIndexPath:.

您可能会解决此问题的一种方法是拥有一个包含每个单元格信息字典的数组(表的每个部分都需要一个数组;我假设只有一个部分)。在开始时-tableView:cellForRowAtIndexPath:,您将使用索引路径中的行号对数组进行索引,然后检查字典的值以确定要出列的单元格类型以及如何设置它。

编辑:听起来您可能对单元重用标识符是什么以及它是如何生成的有些困惑。单元重用标识符是附加到表格视图内的单元的任意字符串。当您要求将单元格出列时,表格视图会检查是否有任何具有该重用标识符的未使用单元格可用。如果所有单元格都是相同类型的单元格并以相同方式配置,那么您将只有一个重用标识符,它可以是您选择的任何字符串。只需确保在调用-dequeueReusableCellWithIdentifier:UITableViewCell's时都使用该字符串-initWithStyle:reuseIdentifier:

于 2013-03-28T15:09:50.820 回答
0

最终,您是 cellIds 的发起者,将它们提供给 中新创建的单元格tableView:cellForRowAtIndexPath:,因此您不需要向 table view 询问 cellIds。完成你所寻求的最好方法是在你的类中添加一个函数:

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

该函数可以在字典、数组或您希望的任何其他方式中查找 cellId。在需要时使用该功能,只要它与您在表格视图中显示的数据保持一致,它就可以工作。

于 2013-03-28T16:14:19.143 回答
0

您需要将数据存储在 indexpath 中您需要什么类型的单元格,因为可重用标识符是从中挑选单元格以进行重用的池。

例如:如果

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

使用它从一个名为“重用”的池中选择一个单元格,如果一个单元格可用于重用,否则创建一个新单元格。因此,您无法找到哪个 indexpath 属于哪个可重用标识符。

于 2013-03-29T13:24:01.380 回答
-1
if(cell != nil)    
NSLog(@"%@", cell.reuseIdentifier);
于 2013-03-28T15:24:08.140 回答