虽然这当然是可能的,但更好的主意是在两种情况下都加载您的导航控制器,并根据他们是否已注册,使用不同的根视图控制器。
if (hasUserSignedUp) {
nav = [[UINavigationController alloc] initWithRootViewController:rootViewController];
}
else {
su = [[SignUpViewController alloc] initWithNibName:nil bundle:nil];
nav = [[UINavigationController alloc] initWithRootViewController:su];
}
[window addSubview:nav.view];
[window makeKeyAndVisible];
应用程序删除应该创建视图层次结构的根,然后您可以从那里按照您认为合适的方式对其进行操作。
如果我是你,我会使用上面的代码,一旦他们登录或注册,推送常规根视图控制器,然后修改导航堆栈堆栈:
[self.navigationController pushViewController:rootViewController animated:YES];
double delayInSeconds = 0.5f;
dispatch_time_t popTime = dispatch_time(DISPATCH_TIME_NOW, delayInSeconds * NSEC_PER_SEC);
dispatch_after(popTime, dispatch_get_main_queue(), ^(void){
self.navigationController.viewControllers = [NSArray arrayWithObject:self.navigationController.viewControllers.lastObject];
});
这不是最干净的方法(dispatch_after
),但您会看到它是如何完成的。确保 rootViewController 已hidesBackButton
设置为YES
.