2012-03-20 8 views
4

分割ビューコントローラを表示する前にモーダルビューコントローラを表示する必要があります。UISplitViewControllerはモーダルビューコントローラを表示しません

このフォーラムでは、モーダルビューコントローラをAppDelegateから提示する必要があることを示唆していますが、そうしないと何も起こりません。

残りのインターフェイスと同じストーリーボードにビューコントローラを設定してあり、ビューコントローラに識別子loginViewControllerを与えました。私はAppDelegateのビューコントローラを次のように表示しようとしています。

- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions 
{ 
    if (UI_USER_INTERFACE_IDIOM() == UIUserInterfaceIdiomPad) 
    { 
     UISplitViewController *splitViewController = (UISplitViewController *) self.window.rootViewController; 
     UINavigationController *navigationController = splitViewController.viewControllers.lastObject; 
     splitViewController.delegate = (id) navigationController.topViewController; 

     UIStoryboard *storyboard = [UIStoryboard storyboardWithName:@"MainStoryboard_iPad" bundle:nil]; 
     LoginViewController *lvc = (LoginViewController *) [storyboard instantiateViewControllerWithIdentifier:@"loginViewController"]; 
     lvc.modalPresentationStyle = UIModalPresentationFullScreen; 
     [splitViewController presentModalViewController:lvc animated:YES]; 
    } 

    [_window makeKeyAndVisible]; 

    return YES; 
} 

私はそうしても何も起こりません。エラーなし、モーダルビューコントローラなし、何もありません。アプリケーションは私の分割ビューコントローラを表示するだけです。

スプリットビューコントローラを表示する前にモーダルビューコントローラをどのように表示することができますか?

答えて

6

ビューコントローラーは、ビューのロードが完了するまで、別のビューコントローラーにプッシュ/プレゼンテーションを許可しません。

単にviewcontroller viewDidLoad/viewWillAppearでpresentModalViewController/pushViewControllerを呼び出すことはできません。これをviewDidAppearで呼び出す必要があります。

私はあなたが言ったのと同じ問題がありました。

私があると言うことができるいくつかのソリューション、

後LoginViewControllerの読み込みを行います[self.window makeKeyAndVisible]。 performSelctor(遅れている可能性があります)にあります。 SplitViewのDetailViewコントローラviewDidAppearのLoginViewControllerを表示するコードを移動します。

おかげで、

のNaveenシャン

+0

AppDelegateのモーダルビューコントローラを表示する前に '[_window makeKeyAndVisible] 'を呼び出すと、そのトリックが実行されました。 'performSelector'を実行する必要はなく、遅れて実行する必要もありませんでした。ご協力ありがとうございました。 – simonbs

+0

yaあなたは@SimonBSですが、performSelectorを使う方がいいです。なぜなら、アプリが5秒以内に起動しなければ、ウォッチドッグタイマを殺すからです。 –

1

代わりのAppDelegate.mでそれをやって、DetailViewControllerでいることを実行します。

LogInViewController *logInVC = [[LogInViewController alloc] init]; 
[self presentModalViewController:logInVC animated:NO]; 

これは私のために動作します。

関連する問題