загрузить представление контроллера, когда приложение становится активным - PullRequest
0 голосов
/ 18 июня 2011

Мне понравится мое приложение, которое всегда запускается при первом его открытии. У меня есть несколько контроллеров представления, и когда я выхожу из приложения и открываю его снова, я вижу контроллер представления, от которого я ушел. Может быть, я должен вызвать метод applicationWillTerminate метод.

Я использую этот код, чтобы открыть новый вид:

 UIViewController *control = [[SomeViewController alloc] initWithNibName:@"SomeViewController"
                                                                            bundle:nil];
UINavigationController *navControl = [[UINavigationController alloc]
                                      initWithRootViewController:control];

[self presentModalViewController:navControl animated:NO];

[navControl setNavigationBarHidden:YES];

[control release];
[navControl release];

этот код прекрасно работает при связывании его с кнопками. Но когда я помещаю этот код в метод applicationDidBecomeActive, он не работает.

Ответы [ 3 ]

2 голосов
/ 18 июня 2011

Самый простой способ - установить UIApplicationExitsOnSuspend в Info.plist.

Это действительно не ожидаемое поведение, хотя. Пользователи ожидают увидеть приложение "там, где они остановились", особенно если они ненадолго покинули приложение (например, потому что им позвонили).

Ваш фрагмент кода добавляет контроллер представления, но вряд ли будет работать, так как ваш делегат приложения не является UIViewController. Он также ничего не делает для удаления старых контроллеров представления.

РЕДАКТИРОВАТЬ: Если все, что вам нужно сделать, это отобразить заставку (или что-то), то это примерно так:

  • В -applicationDidEnterBackground: добавьте представление "заставки" (не контроллер представления) к self.window. (iOS возвращает «снимок экрана» после возврата из -applicationDidEnterBackground: и использует его в анимации переключения приложений; вы хотите, чтобы это было то, что пользователь видит при переключении обратно в ваше приложение)
  • В -applicationWillEnterForeground: делайте любую анимацию, которую хотите, и в конечном итоге удалите вид из окна (вызовите -removeFromSuperview).

РЕДАКТИРОВАТЬ 2: То же самое будет работать в -applicationWillResignActive: / -applicationWillBecomeActive:, за исключением того, что это происходит в случае сна / пробуждения, которое может быть не тем, что вы хотите ...

Я бы не стал использовать контроллеры представления для этого, потому что попытка вставить контроллер представления в иерархию контроллеров представления, вероятно, будет проблематичной (например, вам нужно выяснить, с какого VC представить его, и вам нужно делайте "правильные вещи", если пользователь отображает фоновое изображение вашего приложения, когда ВК находится на экране, и ...)

0 голосов
/ 18 июня 2011

Временное решение:

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

0 голосов
/ 18 июня 2011

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

Вместо этого я предлагаю, чтобы в вашем appDelegate был реализован applicationWillEnterForeground:, который должен восстанавливать состояние во вновь запущенном приложении (эквивалентно состоянию в конце application:didFinishLaunchingWithOptions:).

OR ... (редактирование) Если вы просто хотите запустить определенный viewController (который все еще загружен, верно?) ... Например, если у вас есть контроллер вкладок и вы просто хотите перейти в корень первого контроллера представления, поместите следующий код в applicationWillEnterForeground :

UITabBarController * myTabBar = self.tabBarController;
myTabBar.selectedIndex = 0;  
[[myTabBar.viewControllers objectAtIndex:0] popToRootViewControllerAnimated:NO];
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...