无法在标签栏控制器的顶部完全呈现模态视图控制器

Posted

技术标签:

【中文标题】无法在标签栏控制器的顶部完全呈现模态视图控制器【英文标题】:Unable to present a modal view controller completely over the top of a tab bar controller 【发布时间】:2013-01-26 06:11:10 【问题描述】:

我正在创建一个选项卡式 iPhone 应用程序。当应用程序启动时,如果用户未登录,则应该在选项卡栏控制器的顶部显示一个模式视图(因此看起来这是第一个屏幕)。登录后,模态视图会滑开以显示其后面的标签栏控制器。

不幸的是,当我从我的应用程序委托内部调用[self.tabBarController presentViewController:self.loginViewController animated:NO completion:NULL] 时,我仍然可以看到屏幕底部的选项卡。我需要它们。

具有讽刺意味的是,在寻找解决方案时,我发现大多数人都遇到了逆问题。

我注意到,如果我将窗口的 rootViewController 设置为 UITabBarController,只将其视图作为窗口的子视图插入,那么它会按预期工作,但 Xcode 抱怨缺少根视图控制器。这是怎么回事?

我的应用程序委托的-application:didFinishLaunchingWithOptions: 方法如下所示。

- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions

    [self registerDefaults];
    self.tabBarController = [[[UITabBarController alloc] init] autorelease];
    self.tabBarController.viewControllers = @[
        [self makeSellingListingsController],
        [[[UIViewController alloc] init] autorelease], // stub
        [[[UIViewController alloc] init] autorelease], // stub
        [[[UIViewController alloc] init] autorelease]  // stub
    ];
    self.window = [[[UIWindow alloc] initWithFrame:[[UIScreen mainScreen] bounds]] autorelease];
    self.window.rootViewController = self.tabBarController;
    [self.window addSubview:self.tabBarController.view];

    [self presentLogin]; // this doesn't cover the tabs, but it should

    [self.window makeKeyAndVisible];
    return YES;


- (void)presentLogin

    [self.tabBarController presentViewController:[[[FLLoginViewController alloc]
                                                   initWithNibName:@"FLLoginViewController"
                                                   bundle:[NSBundle mainBundle]] autorelease]
                                        animated:NO
                                      completion:NULL];

【问题讨论】:

如果用户未登录,为什么要以模式打开登录屏幕,然后将其设为 rootcontroller。 【参考方案1】:

不要从标签栏控制器显示它,而是从第一个标签的根控制器,在它的 viewDidAppear 方法中。如果您将 NO 传递给动画参数,当您启动应用程序时,您首先看到的是模态屏幕。

【讨论】:

执行此操作时遇到同样的问题...标签仍然可见。我一定是配置不正确。 @d11wtq,我不知道该说什么。这个对我有用。您从应用程序委托中取出演示文稿并将其移至第一个视图控制器?

以上是关于无法在标签栏控制器的顶部完全呈现模态视图控制器的主要内容,如果未能解决你的问题,请参考以下文章

模态视图控制器优于呈现视图控制器

标签栏控制器在模态转场后消失

呈现一个模态视图控制器,但不要隐藏导航栏

如何从 appdelegate 呈现和关闭模态视图?

在选项卡栏控制器中选择时以模态方式呈现视图控制器

从标签栏控制器模态显示视图