EDIT. В этом потоке нет принятого ответа, но здесь есть творческое решение:
iOS Представлен контроллер модального просмотра при запуске без флэш-памяти
В моем приложении есть экран настройки, который должен быть представлен модально на контроллере корневого представления, если выполняются определенные условия.
Я посмотрел на SO и в интернете, и ближайший ответ до сих пор о том, как это сделать:
AppDelegate, rootViewController и presentViewController
Есть 2 проблемы с этим подходом:
- В iOS 8 это делается так, что в консоли появляется журнал, который, похоже, не является ошибкой, но, вероятно, не очень хорош:
Unbalanced calls to begin/end appearance transitions for UITabBarController: 0x7fe20058d570.
- Контроллер корневого представления на самом деле очень быстро появляется, когда приложение запускается, а затем исчезает в представленном контроллере представления (хотя я явно вызываю
animated:NO
по моему методуpresentViewController
).
Я понимаю, что я могу динамически установить свой корневой контроллер в applicationDidFinishLaunchingWithOptions:
, но я хочу конкретно представить экран установки, так что, когда пользователь будет с ним работать, он отклоняется и открывается истинное первое представление приложения, Это означает, что я не хочу динамически менять свой контроллер корневого представления на экране настройки и показывать свое приложение в режиме мода, когда пользователь будет настроен.
Представление контроллера представления в моем контроллере корневого представления viewDidLoad
также приводит к заметному моменту появления пользовательского интерфейса при первом запуске приложения.
Можно ли программно представить контроллер представления по модулю до того, как приложение отобразило что-либо, чтобы первый вид на месте был модульным контроллером представления?
ОБНОВЛЕНИЕ: Благодарим вас за комментарии, добавив мой текущий код:
В моем AppDelegate.m
:
- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions
{
UIStoryboard *storyboard = [UIStoryboard storyboardWithName:@"Main" bundle:nil];
[self.window makeKeyAndVisible];
[self.window.rootViewController presentViewController:[storyboard instantiateViewControllerWithIdentifier:@"setupViewController"] animated:NO completion:NULL];
return YES;
}
Это делает то, что мне нужно, за исключением того, что он на короткое время отображает контроллер корневого окна окна в течение секунды, когда приложение запускается, а затем исчезает setupViewController, который я нахожу нечетным, учитывая, что я представляю его без анимации и затухания. как представляется, модальный контроллер представления.
Единственное, что меня закрыло, - это вручную добавление представления в представлении контроллера корневого представления, загрузило такой способ:
- (void)viewDidLoad
{
[self.view addSubview:setupViewController.view];
[self addChildViewController:setupViewController];
}
Проблема с этим подходом заключается в том, что я больше не могу "изначально" отклонять setupViewController, и теперь вам придется иметь дело с иерархией представлений и анимировать ее самостоятельно, что прекрасно, если это единственное решение, но я надеялся был разрешен способ добавления контроллера вида без анимации до появления контроллера корневого представления.
ОБНОВЛЕНИЕ 2:. Пробуя много вопросов и ожидая ответа на 2 месяца, этот вопрос предлагает наиболее креативное решение:
iOS Представлен контроллер модального просмотра при запуске без флэш-памяти
Я предполагаю, что пришло время принять, что просто невозможно представить представление без анимации до появления контроллера корневого представления. Однако предложение в этом потоке состоит в том, чтобы создать экземпляр вашего экрана запуска и оставить его дольше, чем по умолчанию, пока контроллер модального представления не сможет представить себя.
Спасибо @Stakenborg за то, что указали мне на эту тему.