iOS,应该如何备份导航堆栈而不是root?

时间:2014-04-18 11:53:31

标签: ios objective-c uinavigationcontroller storyboard

我正在使用故事板和故事板ID,我是导航堆栈中的几个控制器。

  • 菜单控制器
  • 选择控制器
  • 项目控制器
  • 结果控制器

我目前在“结果控制器”上,我想转到“项目控制器”,但重置/重新加载该控制器,我将传递它当前具有的相同属性值。所以实际上我会上升两个级别然后推进。

我只是想知道最好的方法是什么?

我想我可以调用pop几次,然后在我的'Result Controller'中将属性值传递给'Item Controller'?

嗯,我想我会保留第一个pop的动画,然后禁用它进行两次推送。

希望这是有道理的。

5 个答案:

答案 0 :(得分:2)

试试这个。也许它会帮助你。

NSArray *vList = [[self navigationController] viewControllers];
    UIViewController *view;
    for (int i=[vList count]-1; i>=0; --i) {
        view = [vList objectAtIndex:i];
        if ([view.nibName isEqualToString: @"ItemController"])
        {
            [self.navigationController popToViewController:view animated:YES];
            break;
        }
    }

答案 1 :(得分:1)

试试这个

[self.navigationController popToViewController:[[self.navigationController viewControllers] objectAtIndex:2] animated:YES];

你可以回到你想要的任何索引

答案 2 :(得分:1)

 for (UIViewController *controller in [self.navigationController viewControllers])
        {
            if ([controller isKindOfClass:[YourViewCOntrollerName class]])
            {
                [self.navigationController popToViewController:controller animated:YES];

                break;
            }
        }

答案 3 :(得分:0)

弹出到特定视图控制器(在本例中为ItemController),您可以使用下面的代码

[self.navigationController popToViewController:ItemController animated:YES];

答案 4 :(得分:0)

您尝试制作它的方式并不是最佳选择,最终可能会导致问题。干净的方法是编写一种方法来重置“项目控制器”,这样你只需要做1次弹出。