UISplitViewController не будет представлять контроллер модального представления - PullRequest
4 голосов
/ 20 марта 2012

Мне нужно представить контроллер модального вида, прежде чем показывать контроллер разделенного вида.Я нуждаюсь в этом, потому что пользователь должен будет войти в систему.

Я прочитал ответы на этом форуме, предлагая, чтобы модальный контроллер представления был представлен из 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;
}

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

Кто-нибудь может сказать мне, как я могу показать контроллер модального вида, прежде чем показывать контроллер разделенного вида?

Ответы [ 2 ]

6 голосов
/ 22 марта 2012

Контроллер представления не разрешит передавать / представлять на другом контроллере представления, если и до тех пор, пока представление не завершит загрузку.

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

У меня была та же проблема, что вы сказали.

Я могу сказать следующее решение:

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

спасибо,

Навин Шан

1 голос
/ 20 августа 2012

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

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

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

...