[英]Force rotation of a UIViewController in a NavigationController in a TabbarController
[英]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.