我正在尝试创建一个 iOS(特定于 iPhone)应用程序,用户必须在访问该应用程序的其余部分之前进行身份验证。我正在为主应用程序使用 Storyboard,如下所示(分成单独的行):
(1) -> NavigationController
(2) -(o-o)-> OfficesViewController
(3) -[<-]-> OfficeViewController
我还有一个名为 ScanOverlayViewController
的单独 XIB 文件,当用户按下按钮时,该文件会由 OfficeViewController
以编程方式推送。不确定像这样混合 Storyboard 和 XIB 是否合适,但到目前为止一直有效。
无论如何,回到主题,我想在 NavigaitonController
前面放置一个身份验证屏幕,但我不确定如何操作。
我尝试在 Storyboard中放置一个未链接的 View 并将其设置为初始 View 。然后,我放置了一个隐藏按钮并转到 NavigationController
。在代码中,我尝试让 Controller 执行序列,但即使 View 正确显示,序列实际上并未执行。
然后,我尝试使身份验证 View 成为它自己的单独 XIB,并初始化应用程序委托(delegate)中的 Controller 并将其 View 设置为应用程序委托(delegate)的 subview 。这只会导致应用直接进入 OfficesViewController
View ,就好像我什么都没做一样。
是否有一种特定的方法可以正确执行此操作,以便它可以与 Storyboard 一起使用?
提前致谢!
更新
这是我当前的应用程序委托(delegate):
- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions {
AuthenticationViewController *authenticationViewController = [[AuthenticationViewController alloc] initWithNibName:@"AuthenticationViewController" bundle:nil];
if (authenticationViewController) {
NSLog(@"Should have generated %@", authenticationViewController);
};
[[[application keyWindow] rootViewController] presentModalViewController:authenticationViewController animated:YES];
return YES;
}
Controller 确实已分配并初始化,但它只是没有显示。
最佳答案
将 NavigaitonController
作为初始 View Controller ,然后根据需要以模态方式呈现身份验证屏幕。您可以在 -application:didFinishLaunchingWithOptions:
中执行此操作。
混合 XIB 文件和 Storyboard很好, Storyboard无论如何都会变成 XIB(或 nib)文件,它们只是有一些额外的元数据。合理地混合搭配。
例如:
- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions
{
if ([self needsAuthentication])
{
dispatch_async(dispatch_get_main_queue(), ^{
AuthVC *authVC = [[AuthVC alloc] init];
[[UIWindow keyWindow].rootViewController presentModalViewController:authVC animated:YES];
});
}
// anything else
return YES;
}
关于带有登录叠加层的 iOS 5 Storyboard(iOS 5.1;Xcode 4.3.3)?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11270133/