5

一些帮助将不胜感激!

我有一个自定义 UITableView 单元格,由一个图像(绿色、橙色或红色)和两个不同字体大小的标签组成。UITableView 由对象的 NSMutableArray 驱动。

UITableView 分为三个部分,第一部分包含所有带有红色图像的单元格,第二部分包含橙色,第三部分包含绿色。

我已经实现了在 UITableView 中重新排列单元格的功能,允许用户将带有红色图像的项目从红色部分拖到橙色部分。这种拖动效果很好,并且基础数据已正确更新。我知道是这种情况,因为如果我选择单元格,我会转到其详细视图并更新数据。

但是,直到我进入详细信息(或退出应用程序)并返回后,UITableView 才会更新!如果我将有问题的单元格滚动出视图并再次返回视图,它也会更新,因此数组显然包含正确的数据。我只是无法触发视图刷新!

在更改 moveRowAtIndexPath 中的基础数据的代码之后,我尝试了以下操作:

[self.tableView reloadData];

但是,这会导致异常。苹果语言参考实际上说在插入、删除或动画时不能调用 reloadData,这当然是我正在做的。此外,尝试只刷新单元格

[self setNeedsDisplay];

不起作用(尽管它也没有崩溃)。

关于如何刷新 UITableView 的任何想法?我找不到 afterMoveHasBeenCompleted: 方法或任何东西,所以如果我在 moveRowAtIndexPath: 方法期间无法调用 reloadData,那么我在哪里调用它?!

4

2 回答 2

4

知道了!!

我发现解决方案是延迟刷新代码,从而阻止它崩溃。

我将 reloadData 调用放入一个单独的方法中:

- (void)refreshDisplay:(UITableView *)tableView {
[tableView reloadData]; }

然后以 0.5 秒的延迟调用它:

[self performSelector:(@selector(refreshDisplay:)) withObject:(tableView) afterDelay:0.5];

它没有崩溃,而是刷新了!0.5 秒的延迟几乎不明显,完全可以接受。

希望这对其他人有帮助!

谢谢

菲尔

于 2009-05-11T11:57:17.133 回答
2

查看 UITableViewDelegate 的参考资料。如果你为你的 UITableView 分配了一个委托,你可以使用它的方法来处理你的表格视图已经完成某些事情的通知。您可能会使用其中一种

tableView:didEndEditingRowAtIndexPath:
或者
tableView:targetIndexPathForMoveFromRowAtIndexPath:toProposedIndexPath:
来实现这一点。

于 2009-05-10T00:08:19.163 回答