【问题标题】:How do I move data from one array to another? Using UITableView如何将数据从一个阵列移动到另一个阵列?使用 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 方法实现的。

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

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

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

【问题讨论】:

    标签: objective-c cocoa-touch uitableview ios6 nsmutablearray


    【解决方案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 提供一些东西来保存您传输的单元格的位置。

    【讨论】:

      猜你喜欢
      • 2022-01-13
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-11-18
      相关资源
      最近更新 更多