iOS小项目牛叉的demo学无止境

封装一个对于无网络、无内容时展示的库,进来看一下动图秒懂

2017-02-12  本文已影响691人  被帅醒的小吴同志

前言

由于公司项目做的新闻资讯,必然少不了对于无新闻内容的展示和对于无网络时的展示
举个例子:当加载新闻详情页时处于一个无网络状态时,我们就需要对其进行展示无网络图片,好了,需求明白了

来张gif图瞬间明了

应用中示例.gif

不墨迹,直接贴github,希望各路大神来喷

开启传送门:

WyhShowEmpty

先来张demo展示图

demo示例.gif

思路

首先肯定应该能做到全局对于ViewController进行无网络/无内容展示,那么索性直接对UIViewController添加方法 (类别)

其次若展示无内容时,应需要针对数据源进行判断展示,例如当数据源为空时,即展示无内容,那么方法参数里起码应该包含数据源个数信息

其次就是因人而异,任人发挥的自定义样式问题了,这个不做过多解释

注意大神可以移步了,以下是很基础的解释说明,耐心的就多看一会吧,支持一下


所有文件

类建的虽然多,但我觉得不能少,为了以后好维护,可以多增加一些功能,整体框架不能变,队形不能散

UIViewController+WyhShowEmpty为主体文件,处理布局和逻辑判断,说到布局,就需要运用一点最基础的<objc-runtime>机制在类别中添加属性

Style文件是单独抽出来的类, 用于处理所有子控件的样式,这也是最合理的部分,这样就实现了对于样式的抽离,在主体文件是根据样式进行分配init

其他类不做过多解释了,代码大家下载去看吧

应用中实际调用代码示例:

-(void)loadNetWork{

    [[AFHTTPSessionManager manager] POST:url parameters:body progress:nil success:^(NSURLSessionDataTask * _Nonnull task, id  _Nullable responseObject) {
        if ([responseObject[@"code"] isEqualToNumber:@0]) {

            dispatch_async(dispatch_get_main_queue(), ^{
            [self.tableView reloadData];
            //成功回调里添加
            [self wyh_showEmptyMsg:@"很抱歉暂无更新" dataCount:self.dataSource];
            });
        }
    } failure:^(NSURLSessionDataTask * _Nullable task, NSError * _Nonnull error) {
        //失败回调里添加
        [self wyh_showEmptyMsg:@"网络不给力,点击刷新" dataCount:0 isHasBtn:YES Handler:^{
            [self loadNetWork];
        }];
    }];

}

修复内容如下

增加对于UIView的类别,并使其成为底层实现,ViewController是针对UIView的封装

修复了在移除empty后依然有点击事件的bug

修复了在不同尺寸的View上还依然展示屏幕大小的empty的bug

喜欢的github帮点个star ,支持一下,谢谢各位

上一篇 下一篇

猜你喜欢

热点阅读