如何将数据从一个阵列移动到另一个阵列?使用 UITableView

Posted

技术标签:

【中文标题】如何将数据从一个阵列移动到另一个阵列?使用 UITableView【英文标题】:How do I move data from one array to another? Using UITableView 【发布时间】:2012-12-20 19:21:45 【问题描述】:

从我上一个问题开始,我有一个表格视图,其中填充了 2 个 NSMutableArrays、2 个部分和 2 个部分标题,所有这些都可以正常工作。

incompleteItems = [NSMutableArray arrayWithObjects: @"Item 1", @"Item 2", @"Item 3"... , nil];

completeItems = [NSMutableArray arrayWithObjects: nil];

我已将其设置为当用户向右滑动时,单元格附件从显示变为复选标记,向左滑动时从复选标记变为显示。手势是使用 handleSwipeLeft/Right 方法实现的。

我想做的是当用户向右滑动时,将不完整项数组中的项目移动到完成项数组中,从而将项目从“不完整”部分移动到“完成”部分。

实现这一目标的最佳方法是什么?我的经验有限,所以这有点超出我的知识范围。

一如既往地感谢任何帮助。

【问题讨论】:

【参考方案1】:

您可以简单地将一个数组中的对象添加到另一个数组中,然后立即将其删除。

-(void)incompleteToCompleteAtIndex:(NSUInteger)index

    [complete addObject:[incompleteItems objectAtIndex:index]];
    [incompleteItems removeObjectAtIndex:index];


-(void)completeToIncompleteAtIndex:(NSUInteger)index

    [incompleteItems addObject:[complete objectAtIndex:index]];
    [complete removeObjectAtIndex:index];

由于这只会作为 UI 操作的结果发生,因此我假设这将发生在主线程上,并且没有理由锁定。

【讨论】:

+1 这个。您还需要重新加载 tableview 以便调用“rowForIndexPath”方法(我认为这就是它的名称)并返回新对象。您还必须考虑移动选定的 tableview 行,这意味着用户必须首先选择一行。 谢谢乔,虽然这些方法很有意义,但我不知道如何把它们放进去。我猜我需要一些方法来获取首先被刷过的单元格?还是我错过了重点? :S @dmoss18 那会是 cellForRowAtIndexPath 下的 [self.tableView reloadData] 吗?【参考方案2】:

你需要一个漂亮的动画吗?签出:deleteRowsAtIndexPaths:withRowAnimation:insertRowsAtIndexPaths:withRowAnimation:。确保使用beginUpdatesendUpdates 包装这些调用。

我不知道将单元格从一个 tableView 移动到另一个的简单方法。我可以想象一种方法需要您手动执行 3 步动画,移除单元格(并将其添加到浮动在整个视图层次结构前面的新视图中),将新视图移动到目标位置(您可以需要自己做数学来确定目的地的屏幕坐标),最后是一个附加动画。您可以使用一个完全透明的虚拟单元格,并在动画的第一个和最后一个片段中将其换入/换出,以便为 tableview 提供一些东西来保存您传输的单元格的位置。

【讨论】:

以上是关于如何将数据从一个阵列移动到另一个阵列?使用 UITableView的主要内容,如果未能解决你的问题,请参考以下文章

服务器 磁盘阵列讲解

如何将正在运行的 Oracle 数据库迁移到另一个系统

如何使用核心数据访问保存在不同视图控制器中的阵列?

AS3 - 相对于角度移动阵列对象

使用 vDSP 复制阵列内容

如何以最优方式移动大型阵列 n 发生次数