如何将数据从一个阵列移动到另一个阵列?使用 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:
。确保使用beginUpdates
和endUpdates
包装这些调用。
我不知道将单元格从一个 tableView 移动到另一个的简单方法。我可以想象一种方法需要您手动执行 3 步动画,移除单元格(并将其添加到浮动在整个视图层次结构前面的新视图中),将新视图移动到目标位置(您可以需要自己做数学来确定目的地的屏幕坐标),最后是一个附加动画。您可以使用一个完全透明的虚拟单元格,并在动画的第一个和最后一个片段中将其换入/换出,以便为 tableview 提供一些东西来保存您传输的单元格的位置。
【讨论】:
以上是关于如何将数据从一个阵列移动到另一个阵列?使用 UITableView的主要内容,如果未能解决你的问题,请参考以下文章