美文网首页iOS DeveloperiOS开发iOS开发实战
iOS 项目中tableview无数据时展示占位图demo--这

iOS 项目中tableview无数据时展示占位图demo--这

作者: 攻城狮1206 | 来源:发表于2016-03-28 17:02 被阅读5977次

    demo思路:利用KVO实时监听UITableView的数据源数组的变化,无数据展示占位图,否则删除占位图

    demo简单实现了无数据展示占位图,有数据时删除占位图,及添加了图片点击回调事件

    BJNoDataView使用如下:

    @property(nonatomic,strong)NSMutableArray*dataArray;//tableview数组

    在viewDidLoad中添加观察者监听tableview的数据变化

    [self addObserver:self forKeyPath:@"dataArray" options:NSKeyValueObservingOptionNew context:nil];//添加观察者self.dataArray=[NSMutableArray array];//初始化数组

    KVO回调

    #pragma mark-----KVO----

    -(void)observeValueForKeyPath:(NSString *)keyPath ofObject:(id)object change:(NSDictionary*)change context:(void *)context{

    if (![keyPath isEqualToString:@"dataArray"]) {

    return;

    }

    if ([self.dataArray count]==0) {//无数据

    [[BJNoDataView shareNoDataView] showCenterWithSuperView:self.tableView icon:nil iconClicked:^{

    //图片点击回调

    [self loadData];//刷新数据

    }];

    return;

    }

    //有数据

    [[BJNoDataView shareNoDataView] clear];//删除

    }

    -(void)dealloc{//移除观察者

    [self removeObserver:self forKeyPath:@"dataArray"];

    }

    效果如下:

    注意:1.KVO要配对使用,在控制器的dealloc方法中要移除Observer

    2.[self addObserver:self forKeyPath:@"dataArray" options:NSKeyValueObservingOptionNew context:nil];

    此方法监听的只是数组的指针,对数组进行添加删除操作不会触发KVO,数组指针指向新数组时触发KVO: self.dataArray=otherArray;

    3.KVO就是在运行时派生一个子类重写你的setArray方法,从而监听属性改变.

    对数组内容进行操作时调用[[self mutableArrayValueForKey:@"dataArray"] addObject:object];

    该方法可以触发KVO,即用[self mutableArrayValueForKey:@"dataArray"]获取数组时触发KVO

    [self.dataArray addObject:object]不会触发KVO

    数组内容删除同理

    demo点这 

    相关文章

      网友评论

      • Dayu大鱼:你好 , 在Swift项目中怎么使用这个功能??
      • Dayu大鱼:能在Swift中用吗 ?
      • 剁椒鱼尾:如果tableview 有footer的话好像不适用
      • 萨瓦迪卡123456: [[self mutableArrayValueForKeyPath:@"dataArray"] addObject:[NSString stringWithFormat:@"第%d条数据",i]];KVO监听数据添加数据要这样写
      • xksivM:如果只是监听数据源是否为空,我想在 numberOfSectionsInTableView 和 numberOfRowsInSection 中判断数据源是否为空的话,也可以达到一样的目的吧~?

      • JohnQ:博主,这个方法放到UIcollection中没有效果吗?
        攻城狮1206:@JohnQ 这跟使用场景没关系的,你在仔细检查检查哪里不一致
        JohnQ:@攻城狮1206 我刚刚试了一下没有效果
        攻城狮1206:可以的
      • 南烟客777:思路不错,
      • manajay:您好, 这个 没有太大复用性,还是分类的解决思路比较好
        gitKong:@阿兹尔 我简书上有,可以去翻翻,tableView的占位实现
        阿兹尔:有没有demo
        :grin:
        攻城狮1206:@manajay 可以写成分类
      • 32dbcf6aabbc:有这么麻烦吗..在请求数据的时候,判断有没有数据,没有数据直接写个imageView添加到tableView的backgroundView上不就好了..这是我的思路,你demo里的图我正好拿来用..谢啦
        d920e665d3d1:@void_ 对 他那个方法我试过 ,数据有了图片还在
        溪石iOS:@泡小泡 楼主思路其实有很强扩展性,通过kvo将view绑定数据源,可避免接口变更等不定因素
        60010b6bce88:@泡小泡 您的思路很好,也很简单,但是当加载出来cell后,这张图片还在tableView上,是不是有些不合适?

      本文标题:iOS 项目中tableview无数据时展示占位图demo--这

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