欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

DZNEmptyDataSet的使用

程序员文章站 2022-06-01 10:23:13
...
  • DZNEmptyDataSet github的链接:DZNEmptyDataSet
  • DZNEmptyDataSet 是基于 UITableView/UICollectionView 的范畴/扩展(category)类,它可以在空白页面上显示提示信息。

这是 iOS 内建的标准,用于处理空表和集合视图。默认情况下,如果你的表视图是空的,屏幕上什么也不会显示,它给用户的体验不是很好。

使用这个库,你只需要实现一些协议,iOS 就会很好地处理集合视图,然后合理美观地显示出用户信息。

使用方法:

  • 设置UITableView/UICollectionView 代理的时候设置emptyDataSetSource和emptyDataSetDelegate
  • 实现代理方法 ,(按项目的需求实现)

1、设置空视图显示的文字

- (NSAttributedString *)titleForEmptyDataSet:(UIScrollView *)scrollView {
    NSString *title = @"暂无数据";
    NSDictionary *attributes = @{
                                 NSFontAttributeName:Xmz_14FontSize,
                                 NSForegroundColorAttributeName:[UIColor colorWithHexString:@"575757"]
                                 };
    return [[NSAttributedString alloc] initWithString:title attributes:attributes];
}

返回的是NSAttributedString所以可以对其中的文字做处理。

2、设置空视图的图片

- (UIImage *)imageForEmptyDataSet:(UIScrollView *)scrollView{
    return ImageNamed(@"empty");
}

当tableView的数据源为空的时候就会显示
DZNEmptyDataSet的使用
但是这样会有一个问题,那就是当你一进去的时候还没有发起请求的时候,tableView的数据源也是为空的,所以一进去也会显示空视图,所以这时候可以定义一个参数来标记是否已经请求网络。isFristLoding,在网络请求完成后设置isFristLoding = YES
所以在前面的两个代理中最上面加上if (!isFristLoding) { return nil; } 这样就会在请求网络后才显示

3、视图为空时是否可以滑动tableView和collectionView
- (BOOL)emptyDataSetShouldAllowScroll:(UIScrollView *)scrollView{ return YES; }
这个默认是NO所以需要实现下。

4、当有设置透视图时,空视图整体下移到减去透头视图的高度的中心

- (CGFloat)verticalOffsetForEmptyDataSet:(UIScrollView *)scrollView{
    return self.tableView.tableHeaderView.height/2;
}

这个也不止是因为头视图的原因实现的,当你需要设置空视图里面的内容位置的时候也可以使用

5、这个问题是我在项目中遇到的,不知道你们是不是有这个问题,那就是当你有数据的时候翻页后,在点击的筛选条件或者其他按钮重新获取数据且数据为空,这时候EmptyDataView的contenSize的高度也是和tableView的一样,是大于一屏幕的高度的,所以就会出现视图下移看不见,这时候就可以实现下面的代理,改变下tableView的contenSize,也就会改变EmptyDataView的。

- (void)emptyDataSetWillAppear:(UIScrollView *)scrollView {
    [self.tableView setContentOffset:CGPointMake(0, -self.tableView.contentInset.top)];
}

6、还有其他比较常用到的代理

设置空视图里面子视图的间距

- (CGFloat)spaceHeightForEmptyDataSet:(UIScrollView *)scrollView

空白页显示详细描述

- (NSAttributedString *)descriptionForEmptyDataSet:(UIScrollView *)scrollView

空白页显示按钮

- (NSAttributedString *)buttonTitleForEmptyDataSet:(UIScrollView *)scrollView forState:(UIControlState)state

自定义页面

- (UIView *)customViewForEmptyDataSet:(UIScrollView *)scrollView
相关标签: ios