当app从后台进入前台时如何调用方法

时间:2014-05-19 14:44:37

标签: ios methods viewdidload foreground

当我的应用程序从后台进入前台时,是否有一种简单的方法来调用方法?我的程序在viewDidLoad方法中调用了一个方法“nowYouSeeMe”,这在第一次运行应用程序时效果很好。当我使用应用程序然后按下主页按钮时,它会像往常一样移动到背景。现在,当我按下应用程序图标并将其带到前台时,我基本上希望它再次调用nowYouSeeMe方法。

-(void)nowYouSeeMe{
  NSLog(@"I'm back");
}

任何想法??

5 个答案:

答案 0 :(得分:9)

如上所述,App Delegate中有- (void)applicationDidBecomeActive:(UIApplication *)application;,但大多数情况下,您需要的信息不在您的应用代理中,而是您的视图控制器。因此,您可以使用NSNotificationCenter。在您的应用委托中,可以执行以下操作:

NSNotificationCenter *center = [NSNotificationCenter defaultCenter];
[center postNotification:[NSNotification notificationWithName:@"appDidEnterForeground" object:nil]];

现在,您可以在UIViewController的设置代码中设置侦听器:

NSNotificationCenter *center = [NSNotificationCenter defaultCenter];
[center addObserver:self selector:@selector(appDidEnterForeground) name:@"appDidEnterForeground" object:nil];

现在只要应用程序进入前台,就会在视图控制器上调用方法appDidEnterForeground

但您甚至不需要自己发布通知,因为它已在UIApplication中定义。如果您向下滚动文档(UIApplication Class Reference),则会看到UIApplication.h中声明的所有通知,例如UIApplicationWillEnterForegroundNotification。 请注意UIApplicationWillEnterForegroundUIApplicationDidEnterForeground之间的区别,但大多数情况下您要使用UIApplicationWillEnterForeground,只是为了设置所有内容并在显示应用时做好准备。

当然,你应该为你的通知名称定义一个常量,如果你不再需要观察者将其删除。

编辑:您也可以在问题中使用@selector(nowYouSeeMe),错过了

答案 1 :(得分:0)

在appDelegate中有一个名为applicationDidBecomeActive:(UIApplication *)application的方法,它会在您的应用激活时触发。

答案 2 :(得分:0)

尝试通过以下app委托方法调用该方法:

- (void)applicationDidBecomeActive:(UIApplication *)application;

答案 3 :(得分:0)

您应该在AppDelegate中实现applicationWillEnterForeground:方法,如下所示:

- (void)applicationWillEnterForeground:(UIApplication *)application
{
    [self.controller nowYouSeeMe];
}

前提是您将该控制器作为AppDelegate中的属性引用。

答案 4 :(得分:0)

根据其他人的回答,申请代表将通过applicationDidBecomeActive:拨打电话。

该应用程序还会发布UIApplicationDidBecomeActiveNotification通知。因此,任何不是应用代表的人都可以观察到这一点。

如果可以避免,你不应该将应用程序委托用作一个懒惰的 - 一切单例;如果它是一个特定的视图控制器,只有当它处于活动状态并且应用程序返回到前台时才想要做某事,那么没有理由让应用程序委托参与 - 这是视图控制器的行为,而不是应用程序。