我有一个视图控制器,其中我的值是0(标签),当我从另一个ViewController
打开这个视图控制器时,我已经将viewDidAppear
设置为标签上的值20。它工作得很好,但当我关闭我的应用程序,然后再次打开我的应用程序,但值不会改变,因为viewDidLoad
,viewDidAppear
和viewWillAppear
什么都不会被调用。当我打开我的应用程序时,我如何呼叫。我需要从applicationDidBecomeActive
做些什么吗?
发布于 2013-04-08 00:32:50
出于对事件的确切顺序的好奇,我检测了一个应用程序,如下所示:(@Zohaib,您可以使用下面的NSNotificationCenter代码来回答您的问题)。
// AppDelegate.m
- (void)applicationWillEnterForeground:(UIApplication *)application
{
NSLog(@"app will enter foreground");
}
- (void)applicationDidBecomeActive:(UIApplication *)application
{
NSLog(@"app did become active");
}
// ViewController.m
- (void)viewDidLoad
{
[super viewDidLoad];
NSLog(@"view did load");
[[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(appDidBecomeActive:) name:UIApplicationDidBecomeActiveNotification object:nil];
[[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(appWillEnterForeground:) name:UIApplicationWillEnterForegroundNotification object:nil];
}
- (void)appDidBecomeActive:(NSNotification *)notification {
NSLog(@"did become active notification");
}
- (void)appWillEnterForeground:(NSNotification *)notification {
NSLog(@"will enter foreground notification");
}
- (void)viewWillAppear:(BOOL)animated {
[super viewWillAppear:animated];
NSLog(@"view will appear");
}
- (void)viewDidAppear:(BOOL)animated {
[super viewDidAppear:animated];
NSLog(@"view did appear");
}
在启动时,输出如下所示:
2013-04-07 09:31:06.505 myapp[15459:11303] view did load
2013-04-07 09:31:06.507 myapp[15459:11303] view will appear
2013-04-07 09:31:06.511 myapp[15459:11303] app did become active
2013-04-07 09:31:06.512 myapp[15459:11303] did become active notification
2013-04-07 09:31:06.517 myapp[15459:11303] view did appear
进入背景,然后重新进入前台:
2013-04-07 09:32:05.923 myapp[15459:11303] app will enter foreground
2013-04-07 09:32:05.924 myapp[15459:11303] will enter foreground notification
2013-04-07 09:32:05.925 myapp[15459:11303] app did become active
2013-04-07 09:32:05.926 myapp[15459:11303] did become active notification
发布于 2017-07-13 03:54:15
Swift 3.0 ++版本
在您的viewDidLoad
中,在通知中心注册以收听从后台打开的操作
NotificationCenter.default.addObserver(self, selector:#selector(doSomething), name: NSNotification.Name.UIApplicationWillEnterForeground, object: nil)
然后添加此函数并执行所需的操作
func doSomething(){
//...
}
最后,添加此函数,以便在视图控制器被销毁时清理通知观察者。
deinit {
NotificationCenter.default.removeObserver(self)
}
发布于 2018-11-26 22:36:55
Swift 4.2。版本
在viewDidLoad
中注册NotificationCenter,以便在应用程序从后台返回时收到通知
NotificationCenter.default.addObserver(self, selector: #selector(doSomething), name: UIApplication.willEnterForegroundNotification, object: nil)
实现应该调用的方法。
@objc private func doSomething() {
// Do whatever you want, for example update your view.
}
一旦ViewController
被销毁,您可以移除观察者。这仅在iOS9和macOS 10.11版本中是必需的
deinit {
NotificationCenter.default.removeObserver(self)
}
https://stackoverflow.com/questions/15864364
复制相似问题