假设我的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
,上述方法可能不适用于未显示的项目(因为这些单元格不存在)。我有什么选择可以提出建议吗?
答案 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;