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,那么我在哪里调用它?!
知道了!!
我发现解决方案是在刷新代码中加入延迟,这可以防止它崩溃。
我将 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 秒的延迟几乎无法察觉,完全可以接受。
希望这对其他人有帮助!
谢谢
菲尔
| 归档时间: |
|
| 查看次数: |
7392 次 |
| 最近记录: |