更改不可见的自定义UITableviewCell中的项目

时间:2015-05-05 18:13:54

标签: ios objective-c uitableview

假设我的UITableView中有10个项目,但是当用户向上或向下滚动时,一次只显示4个项目。现在假设我在第10行,所以只显示6-> 10行。如果我想在第2行改变某些内容,我该怎么办?

目前我只有4项,我使用以下方法

NSArray *cells = [tableView visibleCells];
for (CustomTableViewCell *cell in cells)
{
    if(cell.someproperty == 23)
    {
       //Show a certain image on the cell
       [cell.someButton setImage:[UIImage imageNamed:@"done.png"] forState:UIControlStateNormal];
    }
}

我意识到由于使用dequeueReusableCellWithIdentifier,上述方法可能不适用于未显示的项目(因为这些单元格不存在)。我有什么选择可以提出建议吗?

4 个答案:

答案 0 :(得分:1)

您不会更改不可见单元格的值。实际上不存在非可见单元格,因为表视图重用单元格的方式(用于性能)。因此,如果您愿意,可以使用可见单元格,但对于那些当前不可见的单元格,您需要等到它们再次可见,然后使用-tableView:cellForRowAtIndexPath:。

另一种选择可能是根本不修改可见细胞。只需调用-reloadData和-tableView:cellForRowAtIndexPath:处理更新后的状态。

答案 1 :(得分:1)

如果未显示单元格内容,则无法更改单元格内容。 下次UITableView将调用cellForRowAtIndexPath:的{​​{1}}时,内容将会刷新。 单元格的内容依赖于数据

因此,修改您的数据模型,以便能够知道第10行中选择的内容会更改第2行的状态。下一次显示第2行时,其更改将会出现。

答案 2 :(得分:0)

没问题。

您只需配置应显示的UITableViewCell,当单元格可见时,系统会自动调用您的回调。

答案 3 :(得分:-1)

我认为最好的方法是你有一个细胞所持有的物体。并且所有对象都存储在Array中。所以你的numberOfRowsInSection返回你的数组的计数。每次滚动表视图时,它都会创建一个新的单元格,具体取决于indexPath.row。所以如果你想改变第二个细胞。您只需要修改数组中的第二个对象。示例:

CellObject *cell_object = [YourArray objectAtIndex:2];
cell_object.cellImage = "Your_new_image";

然后在你的tableView上:cellForRowAtIndex

CellObject *cell_object = [YourArray objectAtIndex:indexPath.row];
cell.image = cell_object.cellImage;