美文网首页
IOS -模态弹窗,自定义AlertView处理

IOS -模态弹窗,自定义AlertView处理

作者: Superman168 | 来源:发表于2018-01-13 17:15 被阅读0次

前言

前两个月项目中有一个需求,添加一个首页广告位,只显示在首页,启动APP后进入首页展示,推送进入展示,未登录返回展示,如下图:


效果图.png

看着貌似挺简单的,自定义弹窗呗!

实现方式

UIWindow上添加一个蒙版,再添加一个自定义的View,即OK

问题来了

  • App运行时,有一个启动广告图,会出现首页的广告位显示在启动页上的情况。
  • 启动后首页广告位未加载时,点击别的tab,广告位可能会显示在别的页面。
  • 通过推送消息进入App或启动App,会有各种意想不到的问题,例如:未登录要先进入登录页面,未登录返回首页的话再显示广告位,或广告位可能会显示在登录页面

总之会有这种意想不到的问题,因为是弹在UIWindow上的,所有的页面都有机会显示,尝试了各种办法解决,始终是有各种问题,例如:

  1. 把弹窗弹在tabBarController.view上
 [showVC.tabBarController.view sendSubviewToBack:showVC.view];
 [showVC.view bringSubviewToFront:adView.overlayer];

但是依然会有类似的问题,万般无奈,用通知勉强实现需求,时而移除,时而显示,也是够麻烦了,最笨的解决办法了,没办法脑子笨。

后话

直到上周无意间想了想,试了一下,算是解决了之前的问题,不用用通知那么麻烦的来控制,各种地方判断监听。是这样的:

    // 获取根视图
    IDBMainController *mainVC = (IDBMainController *)[UIApplication sharedApplication].keyWindow.rootViewController;
    // 当前导航
    IDBNavigationController *curNavCon = [mainVC.viewControllers objectAtIndex:mainVC.selectedIndex];
    // 当前页面
    UIViewController *curVC = [curNavCon.viewControllers lastObject];
    if (![curVC isKindOfClass:[IDBHomeController class]]) {
        // 如果不是在首页,无需操作
        return;
    }

好吧,折磨了很久的问题终于就这样完了。

备注:其实之前也有类似的解决办法,只是想的不够完善。
NSArray *viewControllers = self.navigationController.viewControllers;
for (UIViewController *viewCon in viewControllers) {
    if ([viewCon isMemberOfClass:[IDBHomeController class]]) {
        isDayBox = YES;
        break;
    }
}

大概是这样判断的,但是是没有效果的,因为导航的问题。

相关文章

网友评论

      本文标题:IOS -模态弹窗,自定义AlertView处理

      本文链接:https://www.haomeiwen.com/subject/rsafoxtx.html