iOS 项目中tableview无数据时展示占位图demo--这里只有干货

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点这 

推荐阅读更多精彩内容