为啥在 iOS 中没有调用 view*Disappear 方法?

Posted

技术标签:

【中文标题】为啥在 iOS 中没有调用 view*Disappear 方法?【英文标题】:Why are the view*Disappear methods not being called in iOS?为什么在 iOS 中没有调用 view*Disappear 方法? 【发布时间】:2015-08-25 07:20:30 【问题描述】:

我尝试在单击主页按钮和电源按钮时执行某些操作。我正在使用 ios 进行开发。

这是我使用的代码:

- (void)viewDidDisappear:(BOOL)animated
    [super viewDidDisappear:animated];
    NSLog(@"viewDidDisappear");


- (void)viewWillDisappear:(BOOL)animated
    [super viewWillDisappear:animated];
    NSLog(@"viewWillDisappear");


- (void)applicationFinishedRestoringState
    NSLog(@"applicationFinishedRestoringState");

为什么我在 iPhone 上点击电源键或主页键时没有调用上述函数?

我错过了什么吗?

【问题讨论】:

【参考方案1】:

viewDidDisappear:viewWillDisappear: 将被调用,如果视图被推送或弹出,或者无论如何在你自己的运行循环中消失,通过按主页或电源按钮进入后台不计为视图相关事件,但是而是与应用程序相关的事件。您应该注册UIApplicationWillResignActiveNotification 通知。

例如

[[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(disappearSelector) name:UIApplicationWillResignActiveNotification object:nil];

【讨论】:

【参考方案2】:

根据 Apple 的文档

在接收者的视图即将添加之前调用该方法 到视图层次结构并在配置任何动画之前 显示视图。您可以覆盖此方法以执行自定义任务 与显示视图相关联。例如,您可以使用这个 将状态栏的方向或样式更改为的方法 与正在呈现的视图的方向或样式相协调。 如果你重写了这个方法,你必须在你的某个地方调用 super 实施。

要获得通知,当您的应用程序恢复时,您应该使用: - (void)applicationDidBecomeActive:(UIApplication *)application这个方法实现在你的AppDelegate.m

另一方面

当用户锁定手机时,会发布一个名为 UIApplicationDidEnterBackgroundNotification 的通知。收听方法如下:

在您的 ViewController 的 viewDidLoad: 中:

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

然后在你的方法中添加一些东西

-(void)screenLocked
    //do stuff

【讨论】:

UIApplicationDidEnterBackgroundNotification 将在操作系统决定应用程序实际上应该进入后台时被调用,如果用户很快返回应用程序,它可能根本不会被调用,另一方面,UIApplicationWillResignActiveNotification 将被调用该应用程序不再是最前面的应用程序,并且总是会在主页或电源按钮按下时被调用。

以上是关于为啥在 iOS 中没有调用 view*Disappear 方法?的主要内容,如果未能解决你的问题,请参考以下文章

为啥在 iOS7 中没有调用 willUnloadSearchResultsTableView?

当 Publisher 参数没有要发出的任何新值时,为啥会调用 SwiftUI View 上的 onReceive 块?

为啥在 onResume() 中对 View 调用 getWidth() 返回 0?

iOS:在调用 view.hidden = NO 之后,有没有办法确定 UIView 何时出现

为啥 View 不能显示 Group Radio Widget?

为啥UIView动画会改变View frame?