我有一个基于DB结果数组的tableview,这些结果包含一个日期字段。我有一个包含图像和标签的自定义单元格。我正在尝试:
在cellForRowAtIndexPath中,我验证当前项的日期(objectAtIndex:indexPath.row)是否具有大于最后一项(objectAtIndex:indexPath.row-1)的日期字段。如果这是真的:我想添加一个用特定图像填充ImageView的单元格,但我需要添加一个新行才能显示此图像。
我该怎么做?我已经在进行此验证了,但我需要添加一个新的单元格......
答案 0 :(得分:2)
不要使用cellForRowAtIndexPath
来决定您想要的细胞数量。在调用此方法时,您应该已经设置了数据源,以便为表视图提供所需的所有信息。
这是你需要做的。以某种方式重构代码:
reloadData
方法强制重新加载表视图。 答案 1 :(得分:1)
嘿,您可以在数据库中添加对象(例如ns数组)并使用方法刷新表视图
[tableView reloadData];
然后将再次调用索引路径中行的方法单元格,它将刷新表视图的项目。请确保代码中的方法cellforrawantindexpath知道处理新数据类型(进行验证)。
答案 2 :(得分:1)
您的tableView数据源不应包含任何一个单元格的内容取决于另一个单元格内容的逻辑。相反,您应该为每个请求的indexPath创建一个数据项,并且该数据项应包含要配置单元所需的所有逻辑。如果该单元格上的操作对另一个单元格的外观有影响,则对相应的数据项应用更改,然后为indexPaths调用reloadRowsAtIndexPaths:。
简而言之:仅在tableView:cellForRowAtIndexPath:或tableView:willDisplayCellAtIndexPath中配置单元格,并且仅进行配置。其他逻辑应该放在一些数据(-controller)对象中。
根据建议,您应该向数据阵列添加项目。然后在tableView上调用-insertRowAtIndexPath :. ReloadData就像一个大丑陋的锤子,只有在该tableView的所有数据发生变化时才会使用。