2

我正在尝试创建一个 iOS(iPhone 特定)应用程序,用户必须在访问该应用程序的其余部分之前进行身份验证。我正在为主应用程序使用 Storyboard,它看起来像这样(分成单独的行):

(1)        -> NavigationController
(2)  -(o-o)-> OfficesViewController
(3)   -[<-]-> OfficeViewController

我还有一个名为 XIB 的单独文件,当用户按下按钮时ScanOverlayViewController,它会以编程方式推送。OfficeViewController不确定这样混合 Storyboard 和 XIB 是否合适,但到目前为止它一直在工作。

无论如何,回到主题,我想在 前面放置一个身份验证屏幕NavigaitonController,但我不确定如何。

我尝试在情节提要中放置一个未链接的视图并将其设置为初始视图。然后我放置了一个隐藏按钮并对NavigationController. 在代码中,我尝试让控制器执行 segue,但即使视图正确显示,实际上也没有执行 seque。

然后,我尝试将身份验证视图设为自己单独的 XIB,并在应用程序委托中初始化控制器并将其视图设置为应用程序委托的子视图。这只是导致应用程序直接进入OfficesViewController视图,就好像我什么都没做一样。

有没有一种特定的方法可以正确地做到这一点,以便它与故事板一起使用?

提前致谢!

更新

这是我当前的应用程序委托:

- (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;
}

控制器确实被分配和初始化,但它只是没有出现。

4

1 回答 1

5

将其NavigaitonController作为您的初始视图控制器,然后在需要时以模态方式显示身份验证屏幕。您可以在-application:didFinishLaunchingWithOptions:.

混合 XIB 文件和故事板很好,故事板无论如何都会变成 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;
}
于 2012-06-29T23:33:30.407 回答