重新排列UITableView单元刷新问题

h4x*_*xxr 5 iphone refresh objective-c uitableview

这里有一些帮助将非常感谢!

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

所述的UITableView被分成三个部分,用含有所有细胞与红色图像,第二部分与所述橙色,第三部分与所述绿色的第一部分.

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

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

我在用于更改moveRowAtIndexPath中的基础数据的代码之后尝试了以下内容:

[self.tableView reloadData];
Run Code Online (Sandbox Code Playgroud)

然而,这会导致异常.事实上,Apple语言参考说插入,删除或动画时无法调用reloadData,这当然是我正在做的事情.另外,尝试刷新单元格

[self setNeedsDisplay];
Run Code Online (Sandbox Code Playgroud)

不起作用(虽然它也不会崩溃).

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

h4x*_*xxr 4

知道了!!

我发现解决方案是在刷新代码中加入延迟,这可以防止它崩溃。

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

- (void)refreshDisplay:(UITableView *)tableView {
[tableView reloadData]; }
Run Code Online (Sandbox Code Playgroud)

然后延迟 0.5 秒调用它:

[self performSelector:(@selector(refreshDisplay:)) withObject:(tableView) afterDelay:0.5];
Run Code Online (Sandbox Code Playgroud)

而且它并没有崩溃,反而刷新了!0.5 秒的延迟几乎无法察觉,完全可以接受。

希望这对其他人有帮助!

谢谢

菲尔

  • 或者这只是一个肮脏的黑客行为?我可以使用“animationComplete”方法吗?... (3认同)