0

我有一个登录故事板,每当用户登录时都会实例化它。我有一个主故事板,它是实际的应用程序。

当我的应用程序设置为非活动状态(关闭应用程序)然后重新激活(再次打开应用程序)时,AppDelegate 会检查是否发生了 2 分钟超时。如果是这样,我想显示它已超时的警报,这很好用。

我遇到的问题是,如果您在登录屏幕上,我不想显示该消息。由于我的 Storyboard 使用 TabBarController,因此我没有有效的导航控制器。如何确定当前是否从 App Delegate 显示 LoginViewController?如何获得最顶层的 View 控制器的类名?

NavigationController 为空,仅供参考

4

1 回答 1

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
}
于 2013-04-17T17:23:12.653 回答