美文网首页
DZNEmptyDataSet方法解析

DZNEmptyDataSet方法解析

作者: Silence_xl | 来源:发表于2019-04-24 09:48 被阅读0次
    此框架其实就是UIScrollView类的一个分类,因为UITableView,UICollectionView都继承自UIScrollView,设计思路是给UIScrollView动态添加代理属性,在setter方法中判断当前类是否可以对reloadData进行Swizzle,也就是自定义方法的注入。作者没有用 method_exchangedImplementations() 方法进行方法交换,因为目的就是指明了要对原生的reloadData方法进行修改,所以为了防止reloadData方法在其他第三方里被提前替换了,作者这里建了一张表,以key:value 的形式对原生方法进行储存, 用C函数定义IMP,假如其他第三方用method_exchangedImplementations()方法对reloadData做了运行时的替换,[self swizzle_reloadData]虽然调用的是原生方法,但是在IMP接收到的 _cmd参数不是@selector(reloadData)而是@selector(swizzle_reloadData),这时用查询表在IMP中进行检测判断_cmd是否是原生方法,是的话在调用原生方法之前插入自己的操作;不是就返回。

    pragma mark - DZNEmptyDataSetSource Methods

    #pragma mark - DZNEmptyDataSetSource Methods
    /**
    向数据源询问数据集的标题。
    如果没有设置属性,数据集默认使用固定的字体样式。如果想要不同的字体样式,返回带属性字符串。
     
     @param scrollView 通知数据源的scrollView子类。
     @return 用于数据集标题的带属性字符串,结合了字体、文本颜色、文本pararaph风格等。
     */
    - (NSAttributedString *)titleForEmptyDataSet:(UIScrollView *)scrollView;
    /**
    向数据源询问数据集的描述。
    如果没有设置属性,数据集默认使用固定的字体样式。如果想要不同的字体样式,返回带属性字符串。
     
     @param scrollView 通知数据源的scrollView子类。
     @return 用于数据集描述文本的带属性字符串,结合了字体、文本颜色、文本pararaph风格等。
     */
    - (NSAttributedString *)descriptionForEmptyDataSet:(UIScrollView *)scrollView;
    /**
     向数据源询问数据集的图像。
     
     @param scrollView 通知数据源的scrollView子类。
     @return 数据集的图像。
     */
    - (UIImage *)imageForEmptyDataSet:(UIScrollView *)scrollView;
    
    /**
    向数据源请求图像数据集的着色。默认是零。
     
     @param scrollView 通知数据源的scrollView子类。
     @return 为数据集的图像着色的颜色。
     */
    - (UIColor *)imageTintColorForEmptyDataSet:(UIScrollView *)scrollView;
    
    /**
     *  向数据源询问数据集的图像动画。
     *
     *  @param scrollView 通知委托的scrollView子类对象。
     *
     *  @return 动画图像
     */
    - (CAAnimation *)imageAnimationForEmptyDataSet:(UIScrollView *)scrollView;
    /**
    向数据源询问用于指定按钮状态的标题。
    如果没有设置属性,数据集默认使用固定的字体样式。如果想要不同的字体样式,返回带属性字符串。
     
     @param scrollView 通知数据源的scrollView子类对象。
     @param state 使用指定标题的状态。可能的值在UIControlState中描述。
     @return 用于数据集按钮标题的带属性字符串,结合了字体、文本颜色、文本pararaph风格等。
     */
    - (NSAttributedString *)buttonTitleForEmptyDataSet:(UIScrollView *)scrollView forState:(UIControlState)state;
    /**
    向数据源询问用于指定按钮状态的图像。
    此方法将覆盖buttonTitleForEmptyDataSet:forState:并只显示图像,不显示任何文本。
     
     @param scrollView 通知数据源的scrollView子类对象。
     @param state 使用指定标题的状态。可能的值在UIControlState中描述。
     @return 数据集按钮imageview的图像。
     */
    - (UIImage *)buttonImageForEmptyDataSet:(UIScrollView *)scrollView forState:(UIControlState)state;
    /**
    要求数据源提供用于指定按钮状态的背景图像。
    这个调用没有默认的样式。
     
     @param scrollView 通知数据源的scrollView子类对象。
     @param state 使用指定映像的状态。这些值在UIControlState中描述。
     @return 用于数据集按钮标题的带属性字符串,结合了字体、文本颜色、文本pararaph风格等。
     */
    - (UIImage *)buttonBackgroundImageForEmptyDataSet:(UIScrollView *)scrollView forState:(UIControlState)state;
    
    /**
     向数据源询问数据集的背景颜色。默认是清晰的颜色。
     
     @param scrollView 通知数据源的scrollView子类对象。
     @return 将应用于数据集背景视图的颜色。
     */
    - (UIColor *)backgroundColorForEmptyDataSet:(UIScrollView *)scrollView;
    /**
    要求数据源显示自定义视图,而不是标签、imageview和按钮等默认视图。默认是零。
    使用此方法显示用于加载反馈的活动视图指示器,或用于完整的自定义空数据集。
    返回一个自定义视图将忽略-offsetForEmptyDataSet和-spaceHeightForEmptyDataSet配置。
     
     @param scrollView 通知数据源的scrollView子类对象。
     @return 自定义视图。
     */
    - (UIView *)customViewForEmptyDataSet:(UIScrollView *)scrollView;
    
    /**
    向数据源询问内容的垂直和水平对齐的偏移量。默认是CGPointZero。
     
     @param scrollView 通知数据源的scrollView子类对象。
     @return 用于垂直和水平对准的偏移量。
     */
    - (CGFloat)verticalOffsetForEmptyDataSet:(UIScrollView *)scrollView;
    
    
    /**
     向数据源请求元素之间的垂直空格。默认是11像素。
     
     @param scrollView 通知数据源的scrollView子类对象。
     @return 元素之间的空间高度。
     */
    - (CGFloat)spaceHeightForEmptyDataSet:(UIScrollView *)scrollView;
    

    pragma mark - DZNEmptyDataSetDelegate Methods

    #pragma mark - DZNEmptyDataSetDelegate Methods
    /**
    要求委托知道空数据集在显示时是否应淡入。默认是肯定的。
     
     @param scrollView 通知数据源的scrollView子类对象。
     @return YES 是否将淡入空数据集。
     */
    - (BOOL)emptyDataSetShouldFadeIn:(UIScrollView *)scrollView;
    /**
    请求委托知道当项的数量大于0时是否仍应显示空数据集。默认是没有
     
     @param scrollView 通知数据源的scrollView子类对象。
     @return YES 是否应该强制显示空数据集
     */
    - (BOOL)emptyDataSetShouldBeForcedToDisplay:(UIScrollView *)scrollView;
    /**
    询问委托是否应该呈现和显示空数据集。默认是肯定的。
     
     @param scrollView 通知数据源的scrollView子类对象。
     @return YES 是否应该显示空数据集。
     */
    - (BOOL)emptyDataSetShouldDisplay:(UIScrollView *)scrollView;
    
    /**
     向委托请求触摸权限。默认是肯定的。
     
     @param scrollView 通知数据源的scrollView子类对象。
     @return YES 如果空数据集接收到触摸手势。
     */
    - (BOOL)emptyDataSetShouldAllowTouch:(UIScrollView *)scrollView;
    
    /**
     向委托请求滚动权限。默认是否定的。
     
     @param scrollView 通知数据源的scrollView子类对象。
     @return YES 是否允许空数据集可滚动。
     */
    - (BOOL)emptyDataSetShouldAllowScroll:(UIScrollView *)scrollView;
    
    /**
    向委托询问图像视图动画权限。默认是否定的。
    确保从imageAnimationForEmptyDataSet返回一个有效的CAAnimation对象:
     
     @param scrollView 通知数据源的scrollView子类对象。
     @return YES 如果空数据集被允许动画
     */
    - (BOOL)emptyDataSetShouldAnimateImageView:(UIScrollView *)scrollView;
    
    /**
    告诉委托已单击空的数据集视图。
    使用这个方法,要么resignFirstResponder的一个textfield或searchBar。
     
     @param scrollView 通知数据源的scrollView子类对象。
     @param 查看用户点击的视图
     */
    - (void)emptyDataSet:(UIScrollView *)scrollView didTapView:(UIView *)view;
    
    /**
     告知委托已单击操作按钮。
     
     @param scrollView 通知数据源的scrollView子类对象。
     @param 用户点击的按钮
     */
    - (void)emptyDataSet:(UIScrollView *)scrollView didTapButton:(UIButton *)button;
    /**
     告诉委托将出现空数据集。
    
     @param scrollView 通知数据源的scrollView子类对象。
     */
    - (void)emptyDataSetWillAppear:(UIScrollView *)scrollView;
    /**
    告诉委托已出现空数据集。
    
     @param scrollView 通知数据源的scrollView子类对象。
     */
    - (void)emptyDataSetDidAppear:(UIScrollView *)scrollView;
    /**
    告诉委托空数据集将消失。
    
     @param scrollView 通知数据源的scrollView子类对象。
     */
    - (void)emptyDataSetWillDisappear:(UIScrollView *)scrollView;
    
    /**
    告诉委托空数据集已消失。
    
     @param scrollView 通知数据源的scrollView子类对象。
     */
    - (void)emptyDataSetDidDisappear:(UIScrollView *)scrollView;
    

    相关文章

      网友评论

          本文标题:DZNEmptyDataSet方法解析

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