单击,TableView的多个动作Custom Cell

时间:2014-05-07 23:27:02

标签: ios objective-c uitableview

我做什么

我创建了一个自定义单元格,其中包含一个带有特定图像的按钮。现在,根据某些条件,我设置了该图片image1.jpgimage2.jpg

我是怎么做的

自定义单元格是通过创建一个协议来创建的,我点击那个按钮动作,我注意到在主界面中按下了按钮,我将按钮实例作为参数传递。

问题

现在,问题是当我点击特定单元格中的那个按钮时,我会更改cell.button的图像,但是当我向下滚动时, 我看到有其他已更改图像的单元格

知道为什么会这样吗?

3 个答案:

答案 0 :(得分:1)

由于UITableView重复使用单元格,当单元格移出屏幕时,它会移动到队列中,然后在有新单元格加载时重新使用。

如果要保持每个单元格的属性唯一,则必须每次都重建其值。为此,您可以保留某种数据阵列来存储每个单元的状态/条件。该数组将由tableView的indexPath排序,然后您可以根据indexPath从数组中获取状态,并将单元格更新为正确的图像。

答案 1 :(得分:1)

当您更改单元格的图像并稍后向下或向上滚动时,您的单元格将被重复使用以显示其他信息。
要解决此问题,您应该检查UITableView数据源,看看您是否重复使用此方法中的单元格:

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


我建议在使用上一个方法返回单元格之前配置单元格,并在此时为该按钮指定适当的图像。
为了达到这个目的,你需要一些机制来记住每个细胞的状态。

有关单元格重用和单元格的更多信息,您可以转到Apple Docs for UITableViewCell

答案 2 :(得分:1)

如上面的答案中所述,您可以管理数组中的按钮选定状态和未选择状态,您甚至可以在数组中添加一个用于显示数据的键。

并且在表的didselect事件中,您可以像这样更改所选字段的键

 NSMutableDictionary *newDict = [[NSMutableDictionary alloc] init];
            NSDictionary *oldDict = self.dict_trans_Details ;
            [newDict addEntriesFromDictionary:oldDict];
            [newDict setObject:status forKey:@"transactionstatusid"];
            [table_transdetails_array replaceObjectAtIndex:self.indexValue withObject:newDict];

感谢。