2013-04-08 4 views
0

У меня есть сценарий входа в систему, который я создаю при каждом входе в систему. У меня есть основная раскадровка, которая является фактическим приложением.Поиск активного регулятора текущего вида

Когда приложение установлено в неактивное (закрывающее приложение), а затем снова активируется (снова открывает приложение), AppDelegate проверяет, не произошло ли 2-минутное тайм-аут. Если это так, я хочу показать предупреждение о том, что оно истекло, и это отлично работает.

Проблема заключается в том, что если вы находитесь на экране входа в систему, я не хочу показывать это сообщение. Поскольку моя раскадровка использует TabBarController, у меня нет действительного навигационного контроллера. Как определить, отображается ли в настоящее время LoginViewController из приложения-делегата? Как получить верхнее имя класса класса View?

NavigationController имеет нулевое значение, FYI

ответ

1

Во-первых, вам нужно иметь ссылку на UITabBarController. Это очень просто, если он установлен в качестве начального контроллера просмотра в IB. Вы можете проверить это, открыв раскадровку и найдите маленькую серо-стрелку слева от вашего UITabBarController. Если это так, то просто это сделать:

UITabBarController *myTabBarController; 
if ([_window.rootViewController isKindOfClass:[UITabBarController class]]) { 

    NSLog(@"This window's rootViewController is of the UITabBarController class"); 

    myTabBarController = (UITabBarController *)_window.rootViewController; 

} 

Если вы используете UITabBarController, вы можете получить ссылки на его дочерние UIViewControllers через:

[myTabBarController objectAtIndex:index]; 

Вы можете также запросить ваш TabBarController непосредственно:

NSLog(@"Selected view controller class type: %@, selected index: %d", [myTabBarController selectedViewController], [myTabBarController selectedIndex]); 

Схема индексации на основе нуля следует за порядком вкладок, как вы их установили, программно или через IB (крайняя левая вкладка = индекс 0).

После того, как у вас есть ссылка на ваш UITabBarController, остальные довольно легко:

LoginViewController* myLoginViewController; 

if(![[myTabBarController selectedViewController] isKindOfClass:[LoginViewController class]){ 
    //If the currently selected ViewController is NOT the login page 
    //Show timeout alert 
} 
+0

я в конечном итоге делает то же самое после того, как ошибки я переместил отображение входа в viewDidAppear, в то время как он работал в AppDelegate каждый раз в процессе тестирования (выпуска) это терпит неудачу. Хотелось бы, чтобы я увидел это первым, но ответ был очень хорошим. Однако, что произошло, у меня есть независимая раскадровка для логинов и mainstoryboard для реального приложения. Спасибо за отличный ответ ... –

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