美文网首页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