我有一个包含TabController的viewcontroller。在加载之前,我希望用户登录,以便我可以检查他们有权访问的内容。在我的AppDelegate,bot中,rootViewController(带有标签)和LoginViewController被声明,并且它们也在IB中连线:
我在AppDelegate中有这个:
- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions {
// [window addSubview:[rootController view]];
[window addSubview:[loginViewController view]];
[self.window makeKeyAndVisible];
return YES;
}
我的计划是在验证后关闭登录表单并显示rootController,但rootController会立即显示。我打算这样做:
-(IBAction)DidClickLoginButton:(id)sender {
NotesAppDelegate *delegate = [[UIApplication sharedApplication] delegate];
[delegate.window addSubview:[delegate.rootController view]];
[self dismissModalViewControllerAnimated:YES];
}
有更简单的方法吗?我看不出为什么没有呈现LoginViewController。
编辑:最终通过将其添加到AppDelegate的didFinishLaunchingWithOptions方法中的rootController来实现此功能
- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions {
// [window addSubview:[rootController view]];
[self.window makeKeyAndVisible];
LoginViewController *loginViewController =[[LoginViewController alloc] initWithNibName:@"LoginView" bundle:nil];
[self.rootController presentModalViewController:loginViewController animated:YES];
return YES;
}
答案 0 :(得分:1)
我认为以编程方式100%而不是使用Interface Builder实现更容易。无论哪种方式,在application:didFinishLaunchingWithOptions:
中,您都希望执行以下操作:
[rootViewController presentModalViewController:loginViewController animated:NO];
然后,在用户登录后,执行:
[rootViewController dismissModalViewControllerAnimated:YES];
答案 1 :(得分:0)
是的。当您在窗口中添加根控制器视图时,这将使其显示在最重要的位置(甚至在登录视图上方),然后您的登录视图将在根视图后面被忽略,这是您无法看到的。
编辑: 其中一种方法是在开始时将登录控制器置于root之上(根视图控制器呈现登录视图),然后愉快地关闭登录视图。