2

ユーザーがアプリの残りの部分にアクセスする前に認証する必要がある iOS (iPhone 固有) アプリを作成しようとしています。私はこのように見えるメインアプリケーションにストーリーボードを使用しています(別々の行に分割されています):

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

また、ユーザーがボタンを押したときにScanOverlayViewControllerプログラムによってプッシュされる、という別の XIB ファイルもあります。OfficeViewControllerこのようにストーリーボードと XIB を混在させることが適切かどうかはわかりませんが、これまでのところ機能しています。

話は戻りますが、 の前に認証画面を入れたいのですが、NavigaitonController方法がわかりません。

リンクされていないビューをストーリーボードに配置して、それを初期ビューとして設定しようとしました。次に、隠しボタンを配置し、 へのセグエを作成しましたNavigationController。コードでは、コントローラーにセグエを実行させようとしましたが、ビューが正しく表示されていても、実際にはシークが実行されていませんでした。

次に、認証ビューを独自の個別の 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 に答える