你好,我没有太多的编程经验,我试图在用户离开应用程序时调用方法。我知道我将使用应用委托方法applicationDidEnterBackground
,但如何将该调用作为ViewController
类中的方法?
非常感谢您的帮助!
ViewController.h:
#import <UIKit/UIKit.h>
@interface ViewController : UIViewController <ADBannerViewDelegate>
{
//Images and buttons
}
-(void)stop;
@end
答案 0 :(得分:2)
你可以
在ViewController中观察 UIApplicationDidEnterBackgroundNotification ,或
在appDelegates applicationdidEnterBackground:
方法中调用您的ViewController方法。应用程序委托应该有一个指向 rootViewController 的指针,即:您的ViewController
好运!
编辑:
...
-(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
NSArray *AllViewControllers = [self.navigationController viewControllers];
for (UIViewController *aViewController in AllViewControllers) {
//NSLog(@" >> Nav Stack %@", [aViewController class]);
if ([aViewController isKindOfClass:[YourViewController class]]) {
[(YourViewController *)aViewController yourMethodToCall];
break;
}
}