目标
将此代码用于嵌套的 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];
正如我所看到的,对于重新排序行,过程将是这样的:
MyTreeNode
使用 为移动的行创建一个新实例fromIndexPath
。MyTreeNode
使用为上面要插入移动行的行创建一个新实例toIndexPath
。- 使用某种
addObject:object toParent:parent
类型的方法将上述两个实例相互添加。
对于只是添加行,我想这个过程应该非常相似。
问题
- 上述计划是解决问题的正确方法吗?如果是,制定该
addObject:object toParent:parent
方法的正确方法是什么? - 重新排序时,如何防止将较高级别的部分插入较低级别的部分?例如:不允许在子标题下插入标题。
任何帮助将不胜感激!