DZNEmptyDataSet
DZNEmptyDataSet copied to clipboard
I found a bug, I don't know if it's a bug
之前占位都是自己写,但是最近在交流群,听人说有个比较好的框架,DZNEmptyDataSet, 今天有时间跪读了大神你的这个框架的源码,发现有个小问题 // UITableView support if ([self isKindOfClass:[UITableView class]]) {
UITableView *tableView = (UITableView *)self;
id <UITableViewDataSource> dataSource = tableView.dataSource;
NSInteger sections = 1;
if (dataSource && [dataSource respondsToSelector:@selector(numberOfSectionsInTableView:)]) {
sections = [dataSource numberOfSectionsInTableView:tableView];
}
if (dataSource && [dataSource respondsToSelector:@selector(tableView:numberOfRowsInSection:)]) {
for (NSInteger section = 0; section < sections; section++) {
items += [dataSource tableView:tableView numberOfRowsInSection:section];
}
}
}
这个判断看起来没有什么大问题,一般情况是不会出现问题的,但是有种情况下,这样判断是错误的,这种情况:假设是这个UITableView分组的时候,而cell的个数,通过点击组头来控制是否展示cell,所以当只有组头的时候(也就是没有点击组头展开cell的情况下),这样cell个数不就是0了吗,那么占位图和组头不就同时出现了吗,不知道小弟我说的是否合理,请见谅小弟我的冒犯之处。 @dzenbot
应该不是bug。
首先先看调用的地方:
- (void)dzn_reloadEmptyDataSet
{
if (![self dzn_canDisplay]) {
return;
}
if (([self dzn_shouldDisplay] && [self dzn_itemsCount] == 0) || [self dzn_shouldBeForcedToDisplay] {
}
}
调用dzn_itemsCount前,会先检查-(void)emptyDataSetShouldDisplay{}这个代理的返回值,所以可以自己判断section的数量来决定显不显示DZNEmptyDataSet,即使折叠了,section的数量还是大于0的。
#pragma mark DZNEmptyDataSetDelegate
- (BOOL)emptyDataSetShouldDisplay:(UIScrollView *)scrollView
{
return YES or NO;
}
ok