我正在使用具有以下结构的storyboard开发应用程序:
- TabBarController (2 Tab Bars) - Initial View Controller
o NavigationController1
• RegistrationPage - UIViewController (candidate for rootview)
• DoActivityPage - UIViewController (candidate for rootview)
o NavigationController2
• View Controller 1
首次启动应用程序时,我想向用户显示RegistrationPage,并在随后的时间向用户显示DoActivityPage。由于这两个页面都处于同一级别,因此每个页面都可能成为根视图控制器。
我正在使用Storyboard布局,所以在视觉上我只能将其中一个视图作为rootViewController,这不符合我的目的。所以,我知道我必须以编程方式实现这一目标,并且我已经在Google上尝试了很多但是无法找到方法。
目前,当应用程序启动时,我会看到一个黑色页面,并选择了第一个标签项。如果我在AppDelegate.m中添加以下代码,我会看到页面,但是空底部和顶部栏:
UINavigationController *navController = (UINavigationController *)self.window.rootViewController;
RegistrationPage *rp = [navController.storyboard instantiateViewControllerWithIdentifier:@"RegistrationPage"];
navController.viewControllers = [NSArray arrayWithObjects: rp, nil];
@Michael之前我曾经尝试过类似的代码,但问题是因为我使用的是storyboard,我可以访问tabBarController的唯一方法是:
self.window.rootViewController.tabBarController
UINavigationController *navController = [[UINavigationController alloc]initWithRootViewController:self.window.rootViewController.tabBarController];
而且,当我尝试使用上面的代码时,我收到一个错误 应用程序试图在目标
上推送一个nil视图控制器答案 0 :(得分:1)
通常注册/登录视图控制器没有集成在标签栏内 它是一个完全独立的视图控制器(可能包含在自己的导航控制器中) 应用程序启动后,您应该检查代码是否应该打开注册/登录并将其作为模态视图控制器打开。
修改强>
假设您已初始化tabBarController
属性,registrationViewController
属性和isRegistered
方法,在BOOL
中返回AppDelegate
,
将下一个代码放在application:didFinishLaunchingWithOptions:
方法中(return YES;
之前):
if ([self isRegistered] == NO) {
UINavigationController *navController = [[UINavigationController alloc]
initWithRootViewController:self.tabBarController];
[self.tabBarController presentViewController:navController
animated:NO
completion:NULL];
}