我有一个登录故事板,我会在用户登录时实例化。我有一个主要的故事板,它是实际的应用程序。
当我的应用程序设置为非活动状态(关闭应用程序)然后重新激活(再次打开应用程序)时,AppDelegate会检查是否发生了2分钟超时。如果是这样,我想表明它已经超时的提醒,这很有效。
我遇到的问题是,如果您在登录屏幕上,我不想显示该消息。由于我的Storyboard使用TabBarController,我没有有效的导航控制器。如何确定当前是否从App Delegate显示LoginViewController?如何获得最顶级的View控制器的类名?
NavigationController为null,fyi
答案 0 :(得分: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
}