当我的应用程序从后台进入前台时,是否有一种简单的方法来调用方法?我的程序在viewDidLoad方法中调用了一个方法“nowYouSeeMe”,这在第一次运行应用程序时效果很好。当我使用应用程序然后按下主页按钮时,它会像往常一样移动到背景。现在,当我按下应用程序图标并将其带到前台时,我基本上希望它再次调用nowYouSeeMe方法。
-(void)nowYouSeeMe{
NSLog(@"I'm back");
}
任何想法??
答案 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
。
请注意UIApplicationWillEnterForeground
和UIApplicationDidEnterForeground
之间的区别,但大多数情况下您要使用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
通知。因此,任何不是应用代表的人都可以观察到这一点。
如果可以避免,你不应该将应用程序委托用作一个懒惰的 - 一切单例;如果它是一个特定的视图控制器,只有当它处于活动状态并且应用程序返回到前台时才想要做某事,那么没有理由让应用程序委托参与 - 这是视图控制器的行为,而不是应用程序。