2014-02-24 25 views
0

你好,我沒有太多的編程經驗,我試圖在用戶離開應用程序時調用一個方法。我知道我將使用應用程序委託方法applicationDidEnterBackground,但是如何使該調用成爲我的ViewController類中的方法?Xcode 5,如何在用戶離開應用程序時調用方法?

非常感謝您的幫助!

ViewController.h:

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

-(void)stop; 
@end 

回答

2

您可以在此處使用通知。在viewController的viewDidLoad中爲此通知創建一個監聽器,併爲其分配函數。 如:

在yourView控制器添加下面的viewDidLoad中

[[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(notificationEnabled) name:UIApplicationDidEnterBackgroundNotification object:nil]; 
+0

好吧,我添加到我的viewController的viewDidLoad,現在我還能做什麼? – AwesomeTN

+1

上述代碼中的選擇器是收到通知後要調用的函數的名稱。當您的應用轉到背景時,該功能將自動被調用。 – Aish

0

我沒有得到調用內部的UIViewController方法的目的。雖然你們可以在裏面applicationDidEnterBackground使用該對象

2

創建視圖 - 控制的實例,並調用視圖 - 控制相應的方法您可以

  1. 觀察使用UIApplicationDidEnterBackgroundNotification您的視圖控制器內,或

  2. 調用你的ViewController方法在appDelegates applicationdidEnterBackground:方法中。應用程序委託應該有一個指針指向RootViewController的,即:你的ViewController

好運!

編輯:

... 
-(void)applicationDidEnterBackground:(UIApplication *)application { 

UIViewController *uvc= [UIApplication sharedApplication].keyWindow.rootViewController; 

ViewController *myvc = (ViewController*) uvc; 
[myvc stop]; 

} 
. 
+0

好吧,那麼代碼在方法applicationdidEnterBackground中進行?我試過[myMethod];它給了我一個錯誤 – AwesomeTN

+0

u需要與你的ViewController類的實例來調用你的方法,即:myViewController myMethod的]。如果這是你的意思。我會添加一些代碼來我的回答 – dklt

+0

它不工作,它宣稱:「UIViewController的」不可見的@interface聲明selector'stop」 – AwesomeTN

1

當您關閉或離開你的應用程序,方法的AppDelegate自動調用,你不必叫他們在一些特定的ViewController。

爲了在您的應用程序處於後臺時執行某些操作,您可以在AppDelegate的applicationDidEnterBackground:方法中執行您的邏輯。

或者如果您的應用程序未運行(表示關閉)AppDelegate方法didFinishLaunchingWithOptions:被調用。

+0

在他的問題中,@AwesomeTN特別詢問「我如何使這個調用是我的ViewController類中的一個方法」... – Aish

0

你可以通過創建視圖的一個實例,然後調用該視圖的具體方法

否則,如果您認爲這樣做打開然後你可以找到它的代碼&然後調用具體的方法,通過使用該obj如下在您的applicationDidEnterBackground

NSArray *AllViewControllers = [self.navigationController viewControllers]; 

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