2013-10-12 93 views
0

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

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

重新加载数据,以便它反映发送到服务器的更新,然后重新加载tableview是没有效果的。

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

感谢您的帮助!

+0

澄清:这听起来像你遇到的问题是你的按钮没有改变?你在每个单元格中使用UIButton吗?你可以发布你的实现代码吗? – zeantsoi

回答

0

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

如果您认为在Web服务返回响应后表格的内容大小会发生变化,那么您必须重新加载表格。当然,你可以重新加载整个表格的内容,或者只是几行或几部分。请查看官方documentations了解详细信息

全局变量不是获取按下按钮的单元格索引的好方法。如果您使用按钮的tag属性,更好的方法是。使用indexPath的行(或任何模式所在的部分)设置按钮的标记。然后你可以在按钮的选择器方法中获取tag

Web服务调用完成时获取单元的引用,通过indexPathForRow:inSection:获取NSIndexPath的实例。

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

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

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

并在那里做那个单元格的更改。

+0

正是我在找的东西,像魅力一样工作! –

0

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

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

最后,我建议使用视图控制器的属性来存储这些值,而不是全局值。如果您创建了视图控制器的新实例,并且您基于全局变量的值更改了行为,则仍可能从该视图控制器类的以前用法中设置(具有完全不正确的值)。