首先启动导航堆栈的第二个视图控制器

时间:2019-03-23 14:58:57

标签: ios uiviewcontroller uinavigationcontroller uinavigationbar uinavigation

有一个默认的日历应用程序。

它从下一个视图控制器开始,并且后退按钮已经在那里,就像在此视图控制器之前启动了其他视图控制器一样:

enter image description here

按下返回按钮时,您将获得下一个视图控制器:

enter image description here

他们是如何做到的?

在我的应用中,我需要相同的逻辑(以最新或默认类别启动视图控制器,但用户可以按“后退”按钮选择其他类别)

2 个答案:

答案 0 :(得分:1)

如果要执行此操作,首先要使用pushViewController(animated:)将月份视图推入导航堆栈,并在根视图控制器的animated: false方法中使用viewWillAppear(animated:)。日历将向用户显示在导航堆栈深一层。

因此,第一个控制器是年视图,然后月视图是第二个推入堆栈的视图,但这一切都发生在用户看到任何视图之前。很简单,对吧?

这里有the docs for UINavigationController,以防万一。

答案 1 :(得分:0)

我认为您想要的是在启动时一次推送视图控制器。一种简单的方法是将UINavigationController子类化,并将其分配给情节提要中的根导航控制器。然后只需使用您的子类的viewWillAppear方法进行工作,因为在启动时将只调用一次。

当然,如果将推送代码放入第一个视图控制器的viewWillAppear中,则使用标记仅加载下一个视图控制器一次也可以实现相同的结果。

@interface MyNavigationController : UINavigationController

@end

@implementation MyNavigationController

- (void)viewWillAppear:(BOOL)animated {
    [super viewWillAppear:animated];

    UIViewController *secondVC = [self.storyboard instantiateViewControllerWithIdentifier:@"secondVC"];
    [self pushViewController:secondVC animated:NO];
}

@end