首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >viewWillDisappear中未设置isBeingDismissed:

viewWillDisappear中未设置isBeingDismissed:
EN

Stack Overflow用户
提问于 2012-04-20 22:43:48
回答 5查看 9.5K关注 0票数 15

我的viewWillDisappear:中有一些代码需要清理,我只想在视图移回父视图控制器时使用这些代码。

代码语言:javascript
复制
- (void)viewWillDisappear:(BOOL)animated
{
    if ([self isMovingFromParentViewController] || [self isBeingDismissed]) {
        NSLog(@"isMovingFromParentViewController or isBeingDismissed");
        // clean up
    }
    [super viewWillDisappear:animated];
}

视图可以用两种方式表示:它可以由导航控制器推送,或者表示为模式视图控制器(来自同一导航控制器)。如果它被按下,然后弹出(按下后退按钮),我的清理代码就会运行。如果它以模式视图控制器的形式出现,然后将其清除,代码就不会运行。

我是这样驳回的:

代码语言:javascript
复制
[rootViewController dismissModalViewControllerAnimated:YES];

我的问题是:当我关闭我的视图控制器时,为什么没有设置isBeingDismissed

EN

回答 5

Stack Overflow用户

回答已采纳

发布于 2012-04-21 02:08:36

你的问题在于你是如何抛弃你的模式视图的。rootViewController是如何定义的?

当我调用[self dismissModalViewControllerAnimated:YES]时,[self isBeingDismissed]的计算结果为true。

当我调用[parentViewController dismissModalViewControllerAnimated:YES]时,[self isBeingDismissed]的计算结果为true,因此parentViewController是呈现模式视图的UIViewController (注意:不是UINavigationController)。

票数 4
EN

Stack Overflow用户

发布于 2016-02-15 10:43:57

如果这是模式导航控制器中第一个被关闭的视图控制器,那么从viewWillDisappear:调用self.isBeingDimissed()将返回false

但是,由于整个导航控制器都被取消了,所以实际起作用的是返回trueself.navigationController?.isBeingDismissed()

票数 31
EN

Stack Overflow用户

发布于 2017-06-07 17:02:24

正如@Yuval Tal提到的,当你关闭嵌入在导航控制器中的控制器时,这个标志不起作用。下面是我使用的一个扩展:

代码语言:javascript
复制
extension UIViewController 
{
    var isAboutToClose: Bool {
        return self.isBeingDismissed ||      
               self.isMovingFromParent ||          
               self.navigationController?.isBeingDismissed ?? false
    }
}

当您发现标准.isBeingDismissed无法工作时,可以很容易地对其进行扩展。如果你找到了,请让我们在评论中告诉我。

票数 18
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/10248412

复制
相关文章

相似问题

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