首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >后台打开应用时不调用ViewDidAppear

后台打开应用时不调用ViewDidAppear
EN

Stack Overflow用户
提问于 2013-04-07 23:52:36
回答 6查看 112.1K关注 0票数 178

我有一个视图控制器,其中我的值是0(标签),当我从另一个ViewController打开这个视图控制器时,我已经将viewDidAppear设置为标签上的值20。它工作得很好,但当我关闭我的应用程序,然后再次打开我的应用程序,但值不会改变,因为viewDidLoadviewDidAppearviewWillAppear什么都不会被调用。当我打开我的应用程序时,我如何呼叫。我需要从applicationDidBecomeActive做些什么吗?

EN

回答 6

Stack Overflow用户

回答已采纳

发布于 2013-04-08 00:32:50

出于对事件的确切顺序的好奇,我检测了一个应用程序,如下所示:(@Zohaib,您可以使用下面的NSNotificationCenter代码来回答您的问题)。

代码语言:javascript
复制
// 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");
}

在启动时,输出如下所示:

代码语言:javascript
复制
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

进入背景,然后重新进入前台:

代码语言:javascript
复制
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
票数 316
EN

Stack Overflow用户

发布于 2017-07-13 03:54:15

Swift 3.0 ++版本

在您的viewDidLoad中,在通知中心注册以收听从后台打开的操作

代码语言:javascript
复制
NotificationCenter.default.addObserver(self, selector:#selector(doSomething), name: NSNotification.Name.UIApplicationWillEnterForeground, object: nil)

然后添加此函数并执行所需的操作

代码语言:javascript
复制
func doSomething(){
    //...
}

最后,添加此函数,以便在视图控制器被销毁时清理通知观察者。

代码语言:javascript
复制
deinit {
    NotificationCenter.default.removeObserver(self)
}
票数 43
EN

Stack Overflow用户

发布于 2018-11-26 22:36:55

Swift 4.2。版本

viewDidLoad中注册NotificationCenter,以便在应用程序从后台返回时收到通知

代码语言:javascript
复制
NotificationCenter.default.addObserver(self, selector: #selector(doSomething), name: UIApplication.willEnterForegroundNotification, object: nil)

实现应该调用的方法。

代码语言:javascript
复制
@objc private func doSomething() {
    // Do whatever you want, for example update your view.
}

一旦ViewController被销毁,您可以移除观察者。这仅在iOS9和macOS 10.11版本中是必需的

代码语言:javascript
复制
deinit {
    NotificationCenter.default.removeObserver(self)
}
票数 15
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/15864364

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档