将Login作为模式iOS呈现?

时间:2014-03-29 15:42:55

标签: ios cocoa-touch

我有一个应用程序,它有一个登录导航控制器和一个标签栏控制器。我已将我的标签栏控制器设置为根控制器,但是我希望登录导航控制器显示为模式,以便我可以在他们登录时将其解除,如果是,则根本不显示。它正在阅读正确的行,但未能显示landingviewcontroller。当我运行应用程序时,它会直接跳转到TabBarController。

我的代码如下:

我有一个方法可以检查您是否在我的应用委托中登录,这是我告诉它呈现登陆视图控制器(登录)的地方。我知道,通过逐步确定我没有正确确定我没有登录并在运行时转到这行代码:

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

完整的应用代表:

#import "GFAppDelegate.h"
#import "GFCredentialStore.h"

@implementation GFAppDelegate

- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions
{
    UIStoryboard *storyboard = [UIStoryboard storyboardWithName:@"MainStoryboard" bundle:[NSBundle mainBundle]];
    UIViewController *tabBarController = [storyboard instantiateInitialViewController];
    UIViewController *landingVC = [storyboard instantiateViewControllerWithIdentifier:@"LandingViewController"];

    GFCredentialStore *store = [[GFCredentialStore alloc] init];

    if (store.isLoggedIn) {
        self.window.rootViewController = tabBarController;
    } else {
        [self.window.rootViewController presentViewController:landingVC animated:YES completion:nil];
    }


    // Set root view controller and make windows visible

    [self.window makeKeyAndVisible];

    return YES;
}

我试图明确这一点,但理解它可能会因为写得不好而令人困惑。谢谢你的帮助。

3 个答案:

答案 0 :(得分:2)

您需要做的是始终将rootViewController设置为tabBarController,但如果用户未登录,请从中调用presentViewController。喜欢它的东西:

self.window.rootViewController = tabBarController;
[self.window makeKeyAndVisible];
if (!store.isLoggedIn) {
    [tabBarController presentViewController:landingVC animated:YES completion:nil];
}

答案 1 :(得分:1)

试试这个:

self.window.rootViewController = tabBarController;
[self.window makeKeyAndVisible];
if (store.isLoggedIn==false) {
    [tabBarController presentViewController:landingVC animated:YES completion:nil];
} 

答案 2 :(得分:1)

您的问题是,当尝试从self.window.rootViewController呈现视图控制器时,rootViewController == nil不存在。

我建议你不要把它作为模态(因为你没有控制器来呈现),而是将登录视图控制器设置为root。

self.window.rootViewController = landingVC;

但如果你的意图是在标签栏上面显示登录,请查看我之前建议的答案。