0

我有一个带有自定义单元格的表格视图。每个单元格都包含一个您按下的按钮,用于提示警报。

警报按预期使用 UIAlertView 委托,并检查按钮的标题以确定用户按下了什么。这反过来又调用提交数据的 Web 服务。提交完成后,我需要将该单元格中的按钮更改为另一个按钮图像。

重新加载数据以反映发送到服务器的更新,然后重新加载 tableview 无效。

有没有办法访问 cellForRowAtIndexPath 之外的单元格?我让它根据我按下的按钮设置一个名为 selectedIndex 的全局变量,但这是我所能得到的。以这种方式访问​​单元格是否合理(或一个好主意)。

谢谢你的帮助!

4

2 回答 2

0

有很多方法可以在 tableview 中重新加载数据。但是对于您的情况,如果您可以获得对单元格的引用,则只需进行一些与 UI 相关的更改(更改图像或类似的东西)就足够了。

如果您认为 Web 服务返回响应后表格的内容大小会发生变化,那么您必须重新加载表格。当然,您可以重新加载整个表格的内容,或者只是几行或几节。查看官方文档以获取有关它们的详细信息

全局变量不是获取按下按钮的单元格索引的好方法。更好的方法是使用tag按钮的属性。使用 indexPath 的行(或无论您的架构是什么部分)设置按钮的标记。然后您可以tag在按钮的选择器方法中获取 。

当 Web 服务调用完成时获取对单元格的引用,获取NSIndexPathvia的实例indexPathForRow:inSection:

NSIndexPath *indexPath = [NSIndexPath indexPathForRow:button.tag inSection:0];

检查单元格是否仍然可见并继续进行。

MyCustomCell *cell = (MyCustomCell *)[self.tblView cellForRowAtIndexPath:indexPath];

并在那里对该单元格进行更改。

于 2013-10-12T03:56:49.340 回答
0

UITableView 有一个名为 -cellForRowAtIndexPath: 的方法(不是委托方法)。如果该单元格仍然可见,并且您已关闭索引路径,则可以使用它来获取该单元格。如果单元格不可见,它将返回 nil(但在这种情况下,稍后将调用委托方法以在该索引路径变得可见之前再次为该索引路径提供一个单元格,因此您可以随后对其进行配置)。

需要注意的是,Web 服务调用可能是异步的,在用户按下按钮和您获得 Web 响应之间,许多事情可能会发生变化。用户可能已将单元格滚动到屏幕外,使其不再可见,在这种情况下,您需要以某种方式存储更新的值,以便以后可以正确配置单元格。此外,如果您的代码出于任何原因调用 reloadData,即使保留 NSIndexPath 也可能没有任何意义——如果您的底层模型发生了变化,那么与用户点击关联的模型记录现在可能位于完全不同的 NSIndexPath (或者可能数据集中根本不存在)。根据您的情况,这些可能是也可能不是问题,但如果是,最好保留对所选记录的引用(或该记录的主键),当调用返回时,确定该记录的索引路径现在是什么,并查看该索引路径的单元格是否可见。

最后,我建议使用视图控制器的属性来存储这些值,而不是全局值。如果您创建了视图控制器的新实例,并且您根据全局变量的值更改了行为,那么它可能仍然是从该视图控制器类的先前使用设置的(具有完全虚假的值)。

于 2013-10-12T03:30:55.183 回答