3

我的应用程序是使用 a 设计的UITabBarController,我试图在应用程序委托的顶部显示一个视图(登录屏幕)。当我使用以下代码时:

self.window = [[UIWindow alloc] initWithFrame:[[UIScreen mainScreen] bounds]];
tabBarController = [[UITabBarController alloc] initWithNibName:@"Main_TabBarController" bundle:nil];
self.window.rootViewController = tabBarController;
UIStoryboard *storyboard = [UIStoryboard storyboardWithName:@"MainStoryboard_iPhone" bundle:nil];
Login_ViewController *lvc = [storyboard instantiateViewControllerWithIdentifier:@"Login_ViewController"];

[self.window.rootViewController presentViewController:lvc animated:YES completion:nil];

我收到错误消息Warning: Attempt to present <Login_ViewController: 0x716fac0> on <UITabBarController: 0x7165240> whose view is not in the window hierarchy!,屏幕只是黑屏。如何添加Login_ViewController到窗口层次结构?

4

2 回答 2

3

您始终可以获取当前的根视图控制器并使用它来显示您的登录控制器。

UIViewController *presentingController = [[[[UIApplication sharedApplication] delegate] window] rootViewController];
[presentingController presentViewController:viewController animated:YES completion:nil];

此外,根据我希望登录屏幕的外观,我将使用 UIModalPresentationFormSheet 推送登录控制器。

viewController.modalPresentationStyle = UIModalPresentationFormSheet;
于 2012-10-26T16:51:22.047 回答
0

您正在使用两种不同的机制来创建 UI。您应该将标签栏控制器移动到情节提要中。当您实例化情节提要时,它会用新实例和第一个控制器作为根控制器覆盖您的窗口。

错误消息告诉您标签栏控制器的视图不在视图层次结构中,而不是相反。

我将创建一个控制器,其视图仅包含您的应用程序徽标,并在此控制器内部确定您是否需要进入登录屏幕(如果您有持久登录)。然后从登录屏幕过渡到标签栏控制器。

除非您正在加载的故事板不是主故事板,否则您不需要手动加载它。您应该能够将故事板设置为应用程序的主要部分,iOS 将自动加载它。

于 2012-10-26T16:20:25.243 回答