1

目标

将此代码用于嵌套的 UITableView,实现行的添加和重新排序。

我在哪里

与前面的代码结合使用,我可以移动行,但我还没有弄清楚如何正确插入和删除行。

计划

最初的数据结构是这样的:

    treeNode = [[MyTreeNode alloc] initWithValue:@"Root"];
    MyTreeNode *node1 = [[MyTreeNode alloc] initWithValue:@"Node1"];
    [treeNode addChild:node1];

    MyTreeNode *node1a = [[MyTreeNode alloc] initWithValue:@"Node1a"];
    MyTreeNode *node1b = [[MyTreeNode alloc] initWithValue:@"Node1b"];
    [node1 addChild:node1a];
    [node1 addChild:node1b];

    MyTreeNode *node1a1 = [[MyTreeNode alloc] initWithValue:@"Node1a1"];
    [node1a addChild:node1a1];

    MyTreeNode *node1b1 = [[MyTreeNode alloc] initWithValue:@"Node1b1"];
    MyTreeNode *node1b2 = [[MyTreeNode alloc] initWithValue:@"Node1b2"];
    MyTreeNode *node1b3 = [[MyTreeNode alloc] initWithValue:@"Node1b3"];

    [node1b addChild:node1b1];
    [node1b addChild:node1b2];
    [node1b addChild:node1b3];
    node1b.inclusive = NO;

    MyTreeNode *node2 = [[MyTreeNode alloc] initWithValue:@"Node2"];
    [treeNode addChild:node2];

    MyTreeNode *node2a = [[MyTreeNode alloc] initWithValue:@"Node2a"];
    [node2 addChild:node2a];

    MyTreeNode *node2a1 = [[MyTreeNode alloc] initWithValue:@"Node2a1"];
    [node2a addChild:node2a1];

正如我所看到的,对于重新排序行,过程将是这样的:

  1. MyTreeNode使用 为移动的行创建一个新实例fromIndexPath
  2. MyTreeNode使用为上面要插入移动行的行创建一个新实例toIndexPath
  3. 使用某种addObject:object toParent:parent类型的方法将上述两个实例相互添加。

对于只是添加行,我想这个过程应该非常相似。

问题

  • 上述计划是解决问题的正确方法吗?如果是,制定该addObject:object toParent:parent方法的正确方法是什么?
  • 重新排序时,如何防止将较高级别的部分插入较低级别的部分?例如:不允许在子标题下插入标题。

任何帮助将不胜感激!

4

0 回答 0