为啥在 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 何时出现