0

ルート ビュー コントローラーがUITableViewController.

アプリケーションを起動するときに、View Controller を提示する必要がある場合があります (ペン先などは必要ありません)。これは私がそれをやろうとしている方法です:

私の中でUIApplicationDelegate application:application didFinishLaunchingWithOptions:

SplashViewController * splashViewController = [[SplashViewController alloc] init];
splashViewController.semaphore = semaphore;
[self.window.rootViewController presentViewController:splashViewController animated:NO completion:nil];

問題は、現時点でUITabBarControllerはまだビュー階層にないため、次の警告が表示されることです。

Warning: Attempt to present <SplashViewController: 0xa786a10> on <UITabBarController: 0xb35d830> whose view is not in the window hierarchy!

このコードを AppDelegate からviewDidLoadの最初のビュー コントローラーに移動UITableViewControllerすることは正しくないと思われます。最初のビュー コントローラーにそのビューを作成させるためだけに、AppDelegate にいくつかのプロパティを作成する必要があるからです。このロジックはそこには当てはまりません。

このView Controllerを提示する適切な方法は何でしょうか?

4

2 に答える 2

0

これを行う 1 つの方法は、rootViewController から AppDelegate へのデリゲート コールバックを使用することです。

  • UITableViewController でデリゲート プロトコルを宣言します。

    - (void)rootViewHasLoaded;
    

App Delegate を UITableViewController のデリゲートとして設定します (ストーリーボードでこれを行うことができます)

App Delegate にデリゲート メソッドを実装し、そのメソッドに SplashViewController コードを配置します。

- (void)rootViewHasLoaded
{
    SplashViewController * splashViewController = [[SplashViewController alloc] init];
    splashViewController.semaphore = semaphore;
    [self.window.rootViewController presentViewController:splashViewController 
                                                 animated:NO 
                                               completion:nil];
}

rootViewController / UITableViewController の適切な場所からデリゲート メソッドを呼び出します (おそらくviewDidLoadまたはviewWillAppear)

于 2012-12-28T18:54:25.753 に答える