123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112 |
- //
- // UITableViewController+CYLEmptyReloader.m
- // CYLNoResultTableViewController
- //
- // Created by 微博@iOS程序犭袁 ( http://weibo.com/luohanchenyilong/ ) on 15/12/23.
- // Copyright © 2015年 https://github.com/ChenYilong . All rights reserved.
- //
- #import "UITableView+CYLTableViewPlaceHolder.h"
- #import "CYLTableViewPlaceHolderDelegate.h"
- #import <objc/runtime.h>
- @interface UITableView ()
- @property (nonatomic, assign) BOOL scrollWasEnabled;
- @property (nonatomic, strong) UIView *placeHolderView;
- @end
- @implementation UITableView (CYLTableViewPlaceHolder)
- - (BOOL)scrollWasEnabled {
- // SEL sel = @selector(scrollWasEnabled);
-
- NSNumber *scrollWasEnabledObject = objc_getAssociatedObject(self, _cmd);
- return [scrollWasEnabledObject boolValue];
- }
- - (void)setScrollWasEnabled:(BOOL)scrollWasEnabled {
- NSNumber *scrollWasEnabledObject = [NSNumber numberWithBool:scrollWasEnabled];
- objc_setAssociatedObject(self, @selector(scrollWasEnabled), scrollWasEnabledObject, OBJC_ASSOCIATION_RETAIN_NONATOMIC);
- }
- - (UIView *)placeHolderView {
- return objc_getAssociatedObject(self, @selector(placeHolderView));
- }
- - (void)setPlaceHolderView:(UIView *)placeHolderView {
- objc_setAssociatedObject(self, @selector(placeHolderView), placeHolderView, OBJC_ASSOCIATION_RETAIN_NONATOMIC);
- }
- - (void)cyl_reloadData {
- [self reloadData];
- [self cyl_checkEmpty];
- }
- - (void)cyl_checkEmpty {
- BOOL isEmpty = YES;
-
- id<UITableViewDataSource> src = self.dataSource;
- NSInteger sections = 1;
- if ([src respondsToSelector: @selector(numberOfSectionsInTableView:)]) {
- sections = [src numberOfSectionsInTableView:self];
- }
- for (int i = 0; i<sections; ++i) {
- NSInteger rows = [src tableView:self numberOfRowsInSection:i];
- if (rows) {
- isEmpty = NO;
- }
-
- }
- // isEmpty为空即数据不为空
- if (!isEmpty != !self.placeHolderView) {
- if (isEmpty) {
- self.scrollWasEnabled = self.scrollEnabled;
- BOOL scrollEnabled = NO;
- if ([self respondsToSelector:@selector(enableScrollWhenPlaceHolderViewShowing)]) {
- scrollEnabled = (BOOL)[self performSelector:@selector(enableScrollWhenPlaceHolderViewShowing)];
- if (!scrollEnabled) {
- NSString *reason = @"There is no need to return NO for `-enableScrollWhenPlaceHolderViewShowing`, it will be NO by default";
- @throw [NSException exceptionWithName:NSGenericException
- reason:reason
- userInfo:nil];
- }
- } else if ([self.delegate respondsToSelector:@selector(enableScrollWhenPlaceHolderViewShowing)]) {
- scrollEnabled = (BOOL)[self.delegate performSelector:@selector(enableScrollWhenPlaceHolderViewShowing)];
- if (!scrollEnabled) {
- NSString *reason = @"There is no need to return NO for `-enableScrollWhenPlaceHolderViewShowing`, it will be NO by default";
- @throw [NSException exceptionWithName:NSGenericException
- reason:reason
- userInfo:nil];
- }
- }
- self.scrollEnabled = scrollEnabled;
- if ([self respondsToSelector:@selector(makePlaceHolderView)]) {
- self.placeHolderView = [self performSelector:@selector(makePlaceHolderView)];
- } else if ( [self.delegate respondsToSelector:@selector(makePlaceHolderView)]) {
- self.placeHolderView = [self.delegate performSelector:@selector(makePlaceHolderView)];
- } else {
- NSString *selectorName = NSStringFromSelector(_cmd);
- NSString *reason = [NSString stringWithFormat:@"You must implement makePlaceHolderView method in your custom tableView or its delegate class if you want to use %@", selectorName];
- @throw [NSException exceptionWithName:NSGenericException
- reason:reason
- userInfo:nil];
- }
- self.placeHolderView.frame = CGRectMake(0, 0, self.frame.size.width, self.frame.size.height);
- [self addSubview:self.placeHolderView];
- } else {
- self.scrollEnabled = self.scrollWasEnabled;
- [self.placeHolderView removeFromSuperview];
- self.placeHolderView = nil;
- }
- }
- else if (isEmpty) {
- // Make sure it is still above all siblings.
- [self.placeHolderView removeFromSuperview];
- [self addSubview:self.placeHolderView];
- }
- }
- @end
|