1

我有一个基本的故事板设置,我在其中加载我的 NavViewController,然后指向初始视图控制器。然后我有几个额外的视图控制器,它们都通过segues以线性方式菊花链在一起。当我最初启动我的应用程序时,我在 NavControllerViewController.m 中运行以下命令

(void)viewDidLoad
{
    [super viewDidLoad];
    NSArray * controllerArray = [self viewControllers];
    NSLog(@"view controllers: %@", controllerArray);
} 

该日志仅显示第一个根视图控制器(直接“连接”到导航控制器的那个)。堆栈中缺少所有视图控制器。我的印象是,如果我的故事板上有一个视图控制器,它会自动添加到导航控制器中吗?

如果这不正确,从调用 VC 实例化每个 VC 是否是一个不错的选择?例如,如果我想从 VC1 过渡到 VC2,我是否将以下代码放入 VC1:

UIViewController *vc2 = [self.storyboard instantiateViewControllerWithIdentifier:@"vc2"];
[self pushViewController:vc2 animated:YES];

或者可能:

    [self performSegueWithIdentifier:@"vc2Segue" sender:self];
4

3 回答 3

1

它们都可以通过 segues 到达,但在你对它们进行 segue 之前,它们不会被实例化或压入堆栈。

您可以使用 self perform segue 策略,或推送视图控制器,或者,如果它是响应单个按钮单击,只需控制从该按钮拖动到下一个视图控制器,Xcode 会完成所有其余工作为你。

于 2013-10-29T23:40:44.010 回答
1

如果我正确理解您的问题,您的故事板设置类似于下面的屏幕截图。当应用程序加载此故事板时,它肯定在导航控制器堆栈中只有一个视图控制器,这将是根视图控制器。主故事板

因为other view controllers are still not pushed into the navigation controller stack.

在 中Viewcontroller-1,您可以看到一个按钮some Action,我已经创建了一个push segue从该按钮到 的。一旦Viewcontroller-2您点击该按钮,第二个视图控制器将被推送到导航控制器堆栈。

如果您viewcontrollers现在打印计数,您应该得到计数为2.

在 View Controller-2 中重复相同的操作,现在您可以看到计数增加到3. 因为现在我们将三个视图控制器推送到导航控制器堆栈中。

按下back按钮弹出视图控制器,可以看到视图控制器计数下降,这是因为视图控制器现在正在从导航控制器堆栈中删除。

于 2013-10-30T06:29:23.430 回答
0

正如 AdamG 所说,在UIViewController您继续使用 s 之前,它们不会被推入堆栈。

要设置 segue,请选择 aUIViewController并控制并拖动连接到 target UIViewController。在 Attributes Inspector 选项卡下设置 Storyboard Segue Identifier。

继续UIViewController使用该方法performSegueWithIdentifier:。在performSegueWithIdentifier:被调用之前prepareForSegue:sender:将被调用。这是您可以传递下一个UIViewController需要的任何值的地方。要检查正在调用哪个 segue,请使用segue.identifier. prepareForSegue:sender:之后,您可以访问该destinationViewController属性。

如果需要手动实例化一个UIViewController使用instantiateViewControllerWithIdentifer:. 可以在情节提要的 Identity Inspector 选项卡下设置标识符。

于 2013-10-29T23:50:58.813 回答