我的viewWillDisappear:中有一些代码需要清理,我只想在视图移回父视图控制器时使用这些代码。
- (void)viewWillDisappear:(BOOL)animated
{
if ([self isMovingFromParentViewController] || [self isBeingDismissed]) {
NSLog(@"isMovingFromParentViewController or isBeingDismissed");
// clean up
}
[super viewWillDisappear:animated];
}视图可以用两种方式表示:它可以由导航控制器推送,或者表示为模式视图控制器(来自同一导航控制器)。如果它被按下,然后弹出(按下后退按钮),我的清理代码就会运行。如果它以模式视图控制器的形式出现,然后将其清除,代码就不会运行。
我是这样驳回的:
[rootViewController dismissModalViewControllerAnimated:YES];我的问题是:当我关闭我的视图控制器时,为什么没有设置isBeingDismissed?
发布于 2012-04-21 02:08:36
你的问题在于你是如何抛弃你的模式视图的。rootViewController是如何定义的?
当我调用[self dismissModalViewControllerAnimated:YES]时,[self isBeingDismissed]的计算结果为true。
当我调用[parentViewController dismissModalViewControllerAnimated:YES]时,[self isBeingDismissed]的计算结果为true,因此parentViewController是呈现模式视图的UIViewController (注意:不是UINavigationController)。
发布于 2016-02-15 10:43:57
如果这是模式导航控制器中第一个被关闭的视图控制器,那么从viewWillDisappear:调用self.isBeingDimissed()将返回false。
但是,由于整个导航控制器都被取消了,所以实际起作用的是返回true的self.navigationController?.isBeingDismissed()。
发布于 2017-06-07 17:02:24
正如@Yuval Tal提到的,当你关闭嵌入在导航控制器中的控制器时,这个标志不起作用。下面是我使用的一个扩展:
extension UIViewController
{
var isAboutToClose: Bool {
return self.isBeingDismissed ||
self.isMovingFromParent ||
self.navigationController?.isBeingDismissed ?? false
}
}当您发现标准.isBeingDismissed无法工作时,可以很容易地对其进行扩展。如果你找到了,请让我们在评论中告诉我。
https://stackoverflow.com/questions/10248412
复制相似问题