如何知道在app启动时呈现哪个viewcontroller

时间:2014-01-07 12:01:33

标签: ios objective-c viewcontroller

情况是:

  • 应用程序在后台
  • 用户点击图标应用
  • 应用程序打开并显示视图控制器我们在应用程序上次输入背景之前的位置。

我想知道将要呈现哪个视图控制器。我正在寻找类似的东西:

- (void)applicationDidBecomeActive:(UIApplication *)application {
    if ([self.window.viewControllerOnScreen isKindOfClass:[HomeViewController class]]) {
        //do sthg
    }
}

因为如果是家庭视图控制器(嵌入导航控制器并使用故事板),我会执行一些重载方法。

5 个答案:

答案 0 :(得分:3)

[[self.navigationController viewControllers] lastObject];

第一部分将为您提供堆栈中所有viewControllers的数组,最后一个对象是当前显示的对象。检查它的类类型,看它是homeViewController

答案 1 :(得分:2)

根据此link当应用进入后台时,每个对象都会收到UIApplicationDidEnterBackgroundNotification通知。同样,当应用程序进入前台时,UIApplicationWillEnterForegroundNotification会被触发。

因此您可以使用它来跟踪应用进入前景时打开哪个视图控制器

[[NSNotificationCenter defaultCenter] addObserver:self
                                         selector:@selector(appEnteredForeground:)
                                             name:UIApplicationDidEnterForegroundNotification
                                           object:nil];

答案 2 :(得分:0)

试试这个

 - (UIViewController *)topViewController{
         return [self topViewController:[UIApplication sharedApplication].keyWindow.rootViewController];
 }

     - (UIViewController *)topViewController:(UIViewController *)rootViewController
    {
     if (rootViewController.presentedViewController == nil) {
     return rootViewController;
     }

     if ([rootViewController.presentedViewController isMemberOfClass:[UINavigationController class]]) {
          UINavigationController *navigationController = (UINavigationController *)rootViewController.presentedViewController;
          UIViewController *lastViewController = [[navigationController viewControllers] lastObject];
     return [self topViewController:lastViewController];
     }

      UIViewController *presentedViewController = (UIViewController *)rootViewController.presentedViewController;
     return [self topViewController:presentedViewController];
    }

答案 3 :(得分:0)

我这样做是为了获取当前的viewController

if (![[appDelegate.rootNavController topViewController] isMemberOfClass:NSClassFromString(@"LGChatViewController")]) {}

答案 4 :(得分:-1)

self.tabBarController.viewControllers = [NSArray arrayWithObjects: [self LoadAccount], [self LoadContacts], [self LoadPhoneLine], [self LoadSettings], nil];

如果您使用标签栏,那么您可以像这样设置并显示第一个帐户并继续......