Xcode 5,当用户离开应用程序时如何调用方法?

时间:2014-02-24 06:36:27

标签: ios objective-c appdelegate

你好,我没有太多的编程经验,我试图在用户离开应用程序时调用方法。我知道我将使用应用委托方法applicationDidEnterBackground,但如何将该调用作为ViewController类中的方法?

非常感谢您的帮助!

ViewController.h:

#import <UIKit/UIKit.h>
@interface ViewController : UIViewController <ADBannerViewDelegate>
{
//Images and buttons
}

-(void)stop;
@end

5 个答案:

答案 0 :(得分:2)

你可以

  1. 在ViewController中观察 UIApplicationDidEnterBackgroundNotification ,或

  2. 在appDelegates applicationdidEnterBackground:方法中调用您的ViewController方法。应用程序委托应该有一个指向 rootViewController 的指针,即:您的ViewController

  3. 好运!

    编辑:

    ...
    -(void)applicationDidEnterBackground:(UIApplication *)application {
    
    UIViewController *uvc= [UIApplication sharedApplication].keyWindow.rootViewController;
    
    ViewController *myvc = (ViewController*) uvc;
    [myvc stop];
    
    }
    .
    

答案 1 :(得分:2)

您可以在此处使用通知。在viewController的viewDidLoad中为此通知创建一个侦听器,并为其分配函数。 例如:

在yourView控制器中

在viewDidLoad

中添加以下内容
[[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(notificationEnabled) name:UIApplicationDidEnterBackgroundNotification object:nil];

答案 2 :(得分:1)

当您关闭或离开App时,AppDelegate方法会自动调用,您无需在某些特定的ViewController中调用它们。

当你的应用程序处于后台时,你可以用 AppDelegate的 applicationDidEnterBackground:方法实现你的逻辑。

或者,如果您的应用未运行(表示已关闭) AppDelegate 方法didFinishLaunchingWithOptions:已被调用。

答案 3 :(得分:0)

我没有达到在UIViewController中调用方法的目的。尽管您可以在applicationDidEnterBackground中创建viewcontroller的实例,并使用该对象在viewcontroller中调用相应的方法

答案 4 :(得分:0)

您可以通过创建该View的实例然后调用该视图的特定方法来实现此目的

否则,如果您的视图已打开,那么您可以通过以下代码找到它。然后在applicationDidEnterBackground

中使用该obj调用特定方法
NSArray *AllViewControllers = [self.navigationController viewControllers];

for (UIViewController *aViewController in AllViewControllers) {
    //NSLog(@" >> Nav Stack  %@", [aViewController class]);
    if ([aViewController isKindOfClass:[YourViewController class]]) {
        [(YourViewController *)aViewController yourMethodToCall];
        break;
    }
}