Ios 一次单击,多个操作TableView的自定义单元格 我做什么

Ios 一次单击,多个操作TableView的自定义单元格 我做什么,ios,objective-c,uitableview,Ios,Objective C,Uitableview,我创建了一个自定义单元格,其中有一个按钮,上面有一个特定的图像。现在,根据一些条件,我设置了图像image1.jpg或image2.jpg 我是怎么做到的 自定义单元格是通过创建一个协议创建的,在该协议中,我单击按钮操作,我在主界面中注意到按钮被按下,我将按钮实例作为参数传递 问题 现在,问题是,当我在特定单元格中单击该按钮时,我会更改单元格。按钮的图像,但同时,当我向下滚动时,我会看到其他单元格已更改其图像 知道为什么会发生这种情况吗?由于UITableView重复使用单元格,当单元格移出屏幕

我创建了一个自定义单元格,其中有一个按钮,上面有一个特定的图像。现在,根据一些条件,我设置了图像
image1.jpg
image2.jpg

我是怎么做到的 自定义单元格是通过创建一个协议创建的,在该协议中,我单击按钮操作,我在主界面中注意到按钮被按下,我将按钮实例作为参数传递

问题 现在,问题是,当我在特定单元格中单击该按钮时,我会更改单元格。按钮的图像,但同时,当我向下滚动时,我会看到其他单元格已更改其图像


知道为什么会发生这种情况吗?

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


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

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


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

发生的情况是,当您更改单元格的图像,然后向下或向上滚动时,您的单元格将被重用以显示另一个信息。
若要修复您应该检查UITableView数据源的问题,请查看是否在此方法中重用单元格:

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

我建议在前面的方法中返回单元格之前对其进行配置,并在此时为按钮分配适当的图像<要实现这一点,您需要一些机制来记住每个细胞的状态


有关单元格重用和一般单元格的更多信息,您可以转到

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

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

我建议在前面的方法中返回单元格之前对其进行配置,并在此时为按钮分配适当的图像<要实现这一点,您需要一些机制来记住每个细胞的状态


有关单元重用和单元一般情况的更多信息,您可以转到上述答案中所述的

,您可以在数组中管理按钮的选中和未选中状态,您甚至可以在用于显示数据的数组中添加一个键

在表的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];

谢谢。

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

在表的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];

谢谢。

是的,这是由于手机重复使用造成的。当一个单元格滚动到屏幕外时,它进入一个重用队列,并在另一行中重用。如果这是一个您不熟悉的概念,那么您应该阅读“iOS表视图编程指南”。@Erid Bardhaj添加您的didselect方法code@rdelmar是的,我很熟悉这一点,我没有为每个酒店设置图像。因此,我声明了该按钮的一个出口,并在tableView cellForRowAtIndexPath中更改了每个单元格的图像,并将更改后的索引保存在特定数组中!DarshanKunjadiya我没有使用它,因为我点击了自定义单元格的按钮。是的,这是由于单元格重复使用。当一个单元格滚动到屏幕外时,它进入一个重用队列,并在另一行中重用。如果这是一个您不熟悉的概念,那么您应该阅读“iOS表视图编程指南”。@Erid Bardhaj添加您的didselect方法code@rdelmar是的,我很熟悉这一点,我没有为每个酒店设置图像。因此,我声明了该按钮的一个出口,并在tableView cellForRowAtIndexPath中更改了每个单元格的图像,并将更改后的索引保存在特定数组中!DarshanKunjadiya我没有使用它,因为我正在单击自定义单元格的按钮。