2012-06-26 2 views
2

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

Я ожидаю, что текущий контроллер представления всегда является начальным контроллером представления в раскадровке. Я не могу получить указатель на раскадровку в моем основном AppDelegate.m.

Как проверить и определить, какой контроллер в настоящее время отображается?

+0

делает этот пост помочь? http://stackoverflow.com/questions/9548911/presenting-a-specific-view-controller-from-appdelegate - например, используйте 'applicationWillEnterForeground'. – petert

+0

'AppDelegate' имеет свойство' window', но нет раскадровки. Так что мне делать? – Carina

ответ

4

Если вы хотите просто указатель на раскадровку, то вы можете сделать это:

UIStoryboard *sb = [[[self window] rootViewController] storyboard]; 

где rootViewController фактически первоначальный вид контроллера раскадровку. Если вы ожидаете, что этот контроллер будет текущим контроллером (как вы говорите), тогда вам будет хорошо, но если вы хотите действительно обновить свой пользовательский интерфейс, то, я думаю, вы могли бы опубликовать пользовательское уведомление от делегата (внутри applicationDidBecomeActive), и зарегистрируйте каждый контроллер, который может заинтересовать его, чтобы он мог обновить свой пользовательский интерфейс (или просто добавить self в качестве наблюдателя для UIApplicationDidBecomeActiveNotification, чтобы поймать то же, что и ваш делегат).

PS. Если rootViewController это UINavigationController вы можете получить в настоящее время показывая контроллер, как это:

id currentController = [[[self window] rootViewController] visibleViewController]; 
+1

Спасибо! Это полезно. Да, я ожидаю, что 'rootViewController' будет текущим контроллером, поэтому я сделал' [self.window makeKeyAndVisible]; 'inside' applicationDidBecomeActive'. Когда я перезапущу приложение,' loginAciton' внутри 'rootViewController' все равно вызывается, но не может' presentModalViewController: [self.storyboard instantiateViewControllerWithIdentifier: @ "Навигация"] '. Зачем? – Carina

+0

PS. Мой 'rootViewController' не является' UINavigationController'. – Carina

+0

Производит ли он какие-либо ошибки? Что происходит, когда вы пытаетесь представить контроллер? – Alladinian