2012-03-20 1 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

Контроллер просмотра не позволяет нажимать/показывать на другом диспетчере представлений, пока и до тех пор, пока вид не будет полностью загружен.

Проще говоря, нам не позволено называть presentModalViewController/pushViewController в viewcontroller viewDidLoad/viewWillAppear. мы должны вызвать это в viewDidAppear.

У меня была та же проблема, о которой вы говорили.

Некоторые решения я могу сказать это,

Выполните загрузку LoginViewController после [self.window makeKeyAndVisible]; и в performSelctor (может быть с задержкой). Переместите код, чтобы отобразить LoginViewController в представлении контроллера DetailView ViewDidAppear.

спасибо,

Нэвин Shan

+0

Вызов '[_window makeKeyAndVisible]' перед представлением контроллера модального представления в AppDelegate сделал трюк. Не нужно было делать 'performSelector' или делать это с задержкой. Спасибо за помощь. – simonbs

+0

ya вы правы @SimonBS, но лучше использовать performSelector, потому что если приложение не запустится через 5 секунд, он будет убит таймером сторожевого таймера. –

1

Вместо того, чтобы делать это в AppDelegate.m, сделать это в DetailViewController:

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

Это работает для меня.

 Смежные вопросы

  • Нет связанных вопросов^_^