首先启动导航堆栈的第二个视图控制器
Start second view controller of navigation stack first
有一个默认的日历应用程序。
它从下一个视图控制器开始,后退按钮已经在那里,就像在这个视图控制器之前启动了其他视图控制器一样:
当您按下后退按钮时,您将获得下一个视图控制器:
他们是怎么做到的?
在我的应用程序中,我需要相同的逻辑(以最新或默认类别启动视图控制器,但用户可以按返回按钮 select 不同的类别)
如果我要这样做,我会首先简单地使用 pushViewController(animated:)
将月视图推送到导航堆栈,在根视图控制器的 viewWillAppear(animated:)
方法中使用 animated: false
.日历向用户显示已经在导航堆栈中深一层。
因此,第一个控制器是年视图,然后是月视图是第二个压入堆栈的控制器,但这一切都发生在用户看到任何视图之前。简单吧?
这里是the docs for UINavigationController以防有帮助。
我想你想要的是在开始时推送一次视图控制器。一种简单的方法是子 class UINavigationController
并将其分配给情节提要中的根导航控制器。然后只需在您的 sub-class' 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
有一个默认的日历应用程序。
它从下一个视图控制器开始,后退按钮已经在那里,就像在这个视图控制器之前启动了其他视图控制器一样:
当您按下后退按钮时,您将获得下一个视图控制器:
他们是怎么做到的?
在我的应用程序中,我需要相同的逻辑(以最新或默认类别启动视图控制器,但用户可以按返回按钮 select 不同的类别)
如果我要这样做,我会首先简单地使用 pushViewController(animated:)
将月视图推送到导航堆栈,在根视图控制器的 viewWillAppear(animated:)
方法中使用 animated: false
.日历向用户显示已经在导航堆栈中深一层。
因此,第一个控制器是年视图,然后是月视图是第二个压入堆栈的控制器,但这一切都发生在用户看到任何视图之前。简单吧?
这里是the docs for UINavigationController以防有帮助。
我想你想要的是在开始时推送一次视图控制器。一种简单的方法是子 class UINavigationController
并将其分配给情节提要中的根导航控制器。然后只需在您的 sub-class' 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