导航控制器添加子控制器,你遇到问题了吗?

iOS中提供了经典弹框供开发者使用,但是每个公司为了展现出自身的优势,会制作各种酷(sha)炫(diao)的弹框,网上也有其他各种各样的实现。当然,也有使用控制器来实现的方案。下面说下使用此方案遇到的问题。

使用控制器实现的话,就会有个操作,将控制器当做子控制器添加到父控制器上。如果父控制器是个导航控制器,可能就会遇到弹框显示无法退出的情况。具体步骤如下:

  1. 父控制器为导航控制器,并且导航控制器已经有了至少两个子控制器。
  2. 展示弹框,这个时候弹框控制器至少是父控制器的第三个子控制器。
  3. 调用导航控制器的出栈操作,至少保证此步骤之后弹框控制器已经不在导航控制器的控制下。

这个时候,你一定会发现弹框还会存在,但是点击任何地方没有了反应,弹框无法退出。

原因就是此时弹框控制器的父控制器不存在了,但是view还在呈现。失去了管理,就无法操作了。

解决方法就是重写UIViewController- (void)willMoveToParentViewController:(UIViewController *)parent方法,并添加如下代码:

- (void)willMoveToParentViewController:(UIViewController *)parent
{
    if (parent == nil) {
        [self dismiss];
        return;
    }
    [super willMoveToParentViewController:parent];
}

这里就是针对父控制器为nil时,弹框退出。这样就不会在出现上面的Bug了。

猜你喜欢

转载自blog.csdn.net/jianghui12138/article/details/82997248
今日推荐