2012-03-20 59 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將不允許推送/呈現在另一個視圖控制器上。

簡單地說我們不允許在viewcontroller中調用presentModalViewController/pushViewController viewDidLoad/viewWillAppear。我們需要在viewDidAppear中調用它。

我有同樣的問題,你說。

一些解決方案,我可以說是,

後做LoginViewController的裝載[self.window makeKeyAndVisible]並在一個performSelctor(可能有一個延遲)。 移動代碼以在SplitView的DetailView控制器viewDidAppear中顯示LoginViewController。

感謝,

納文珊

+0

在呈現AppDelegate中的模式視圖控制器之前,調用'[_window makeKeyAndVisible]'做了訣竅。沒有必要執行'performSelector'或者延遲執行。感謝您的幫助。 – simonbs 2012-03-25 09:51:25

+0

你是對的@SimonBS,但它更好地使用performSelector,因爲如果應用程序不會在5秒內啓動它會殺死看門狗定時器。 – 2012-03-26 10:15:47

1

而是在AppDelegate.m做的,這樣做,在DetailViewController:

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

這對我的作品。

相關問題