DZNEmptyDataSet方法解析
2019-04-24 本文已影响0人
Silence_xl
此框架其实就是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;