Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/objective-c/22.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Objective c 如何通过编辑创建嵌套的UITableView 球门_Objective C_Uitableview_Tree_Nested_Collapse - Fatal编程技术网

Objective c 如何通过编辑创建嵌套的UITableView 球门

Objective c 如何通过编辑创建嵌套的UITableView 球门,objective-c,uitableview,tree,nested,collapse,Objective C,Uitableview,Tree,Nested,Collapse,用于嵌套UITableView,实现行的添加和重新排序 我现在在哪里 结合使用前面的代码,我可以在行之间移动,但我还没有弄清楚如何正确地插入和删除行 计划 初始数据结构如下所示: treeNode = [[MyTreeNode alloc] initWithValue:@"Root"]; MyTreeNode *node1 = [[MyTreeNode alloc] initWithValue:@"Node1"]; [treeNode addChild:node1];

用于嵌套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];
在我看来,对行进行重新排序的过程如下:

    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];
使用fromIndexPath为移动的行创建MyTreeNode的新实例。 使用toIndexPath为上面要插入移动行的行创建MyTreeNode的新实例。 使用某种addObject:object-toParent:parent类型的方法将上述两个实例相互添加。 对于仅仅添加行,我认为过程应该相当类似

问题 上面的计划是解决问题的正确方法吗?如果是,使addObject:object成为parent:parent方法的正确方法是什么? 重新排序时,如何防止较高级别的节插入较低级别的节?例如:不允许在子标题下插入标题。 任何帮助都将不胜感激