我有一个应用程序,它有一个登录导航控制器和一个标签栏控制器。我已将我的标签栏控制器设置为根控制器,但是我希望登录导航控制器显示为模式,以便我可以在他们登录时将其解除,如果是,则根本不显示。它正在阅读正确的行,但未能显示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;
}
我试图明确这一点,但理解它可能会因为写得不好而令人困惑。谢谢你的帮助。
答案 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;
但如果你的意图是在标签栏上面显示登录,请查看我之前建议的答案。