繁体   English   中英

TabBarController-> NavigationController->使用Storyboard的多个UIViewController(rootview控制器)

[英]TabBarController -> NavigationController -> Multiple UIViewController (rootview controllers) using 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我之前曾尝试过类似的代码,但是问题是因为我正在使用情节提要,因此访问tabBarController的唯一方法是通过以下方式:

self.window.rootViewController.tabBarController
UINavigationController *navController = [[UINavigationController alloc]initWithRootViewController:self.window.rootViewController.tabBarController];

而且,当我尝试使用上面的代码时,我得到一个错误,应用程序试图将nil视图控制器推到目标上

通常,注册/登录视图控制器未集成在选项卡栏中。
它是一个完全独立的视图控制器(可以包含在其自己的导航控制器中)。
应用启动后,您应该签入代码是否应该打开注册/登录并将其作为模式视图控制器打开。

编辑
假如你已经被初始化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];
}
  • 可能会有更好的地方放置此代码,但这是最简单的解释,假设我不知道您的项目中有哪些类。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM