| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390 |
- //
- // YHSuperTableView.m
- // github: https://github.com/samuelandkevin
- //
- // Created by samuelandkevin on 16/5/31.
- // Copyright © 2016年 HKP. All rights reserved.
- //
- #import "YHRefreshTableView.h"
- #import "MJRefresh.h"
- @interface YHRefreshTableView()
- {
- UIView *_viewLoadFailed;
- UIView *_viewLoadingState;
- UIView *_viewNoData;
- }
- @end
- @implementation YHRefreshTableView
- /*
- // Only override drawRect: if you perform custom drawing.
- // An empty implementation adversely affects performance during animation.
- - (void)drawRect:(CGRect)rect {
- // Drawing code
- }
- */
- - (id)initWithCoder:(NSCoder *)aDecoder {
- self = [super initWithCoder:aDecoder];
-
- return self;
- }
- - (void)awakeFromNib {
- [super awakeFromNib];
-
- }
- /*
- // Only override drawRect: if you perform custom drawing.
- // An empty implementation adversely affects performance during animation.
- - (void)drawRect:(CGRect)rect {
- // Drawing code
- }
- */
- #pragma mark - Private
- - (void)createHeaderView{
-
- if (!self.mj_header) {
- self.mj_header = [MJRefreshNormalHeader headerWithRefreshingTarget:self refreshingAction:@selector(loadNew)];
- }
-
- }
- - (void)removeHeaderView{
- self.mj_header = nil;
- }
- - (void)creatFooterView{
-
- if (!self.mj_footer) {
- self.mj_footer = [MJRefreshBackNormalFooter footerWithRefreshingTarget:self refreshingAction:@selector(loadMore)];
- }
-
- }
- - (void)removeFooterView {
- self.mj_footer = nil;
- }
- - (void)didFinishLoadData {
- }
- #pragma mark - Life
- - (void)dealloc {
-
- }
- #pragma mark - Public
- - (void)loadBegin:(YHRefreshType)type{
- [self showLoadingView:YES];
- switch (type)
- {
- case YHRefreshType_LoadNew:
- {
- [self createHeaderView];
- }
- break;
- case YHRefreshType_LoadMore:
- {
- [self creatFooterView];
- }
- break;
- default:
- break;
- }
- }
- - (void)loadFinish:(YHRefreshType)type{
-
- [self showLoadingView:NO];
- switch (type)
- {
- case YHRefreshType_LoadNew:
- {
- [self.mj_header endRefreshing];
- }
- break;
- case YHRefreshType_LoadMore:
- {
- [self.mj_footer endRefreshing];
- }
- break;
- default:
- break;
- }
- }
- - (void)endRefreshingWithNoMoreData{
-
- }
- #pragma mark - Setter
- - (void)setEnableLoadNew:(BOOL)enableLoadNew
- {
- _enableLoadNew = enableLoadNew;
- if (_enableLoadNew) {
- [self createHeaderView];
- }
- else {
- [self removeHeaderView];
- }
- }
- - (void)setEnableLoadMore:(BOOL)enableLoadMore
- {
- _enableLoadMore = enableLoadMore;
- if (_enableLoadMore) {
- [self creatFooterView];
- }
- else {
- [self removeFooterView];
- }
- }
- - (void)setNoData:(BOOL)noData{
- _noData = noData;
- [self setNoData:noData withText:ASLocalizedString(@"暂无数据")];
- }
- - (void)setNoData:(BOOL)noData withText:(NSString *)tips{
-
- [self setNoDataInAllSections:NO noData:noData withText:tips];
-
- }
- - (void)setNoDataInAllSections:(BOOL)showNoDataInAllSections noData:(BOOL)noData withText:(NSString *)tips{
-
- if (noData)
- {
- if (!_viewNoData) {
- _viewNoData = [[UIView alloc] initWithFrame:CGRectMake(0, 0, self.bounds.size.width, 50)];
-
- UILabel *labelTips = [[UILabel alloc] initWithFrame:_viewNoData.frame];
- // labelTips.top = 0;
- labelTips.textAlignment = NSTextAlignmentCenter;
- labelTips.tag = 111;
- labelTips.font = [UIFont systemFontOfSize:14.0f];
- labelTips.text = tips;
- [_viewNoData addSubview:labelTips];
-
- }
-
- if (showNoDataInAllSections)
- {
- UILabel *labelTips = [_viewNoData viewWithTag:111];
- labelTips.text = tips;
- [self addSubview:_viewNoData];
- }
- else
- {
- if (self.numberOfSections > 0 && [self numberOfRowsInSection:0]) {
- //有内容不显示
- }
- else{
- UILabel *labelTips = [_viewNoData viewWithTag:111];
- labelTips.text = tips;
- [self addSubview:_viewNoData];
- }
- }
-
- }
- else
- {
- if (_viewNoData.superview) {
- [_viewNoData removeFromSuperview];
- }
- }
- }
- - (void)setNoMoreData:(BOOL)noMoreData{
- _noMoreData = noMoreData;
- if (_noMoreData) {
- [self.mj_footer endRefreshingWithNoMoreData];
- }
- else{
- [self.mj_footer resetNoMoreData];
- }
- }
- #pragma mark - Public
- - (void)showLoadingView:(BOOL)isShow {
- if (isShow) {
- if (!_viewLoadingState)
- {
- _viewLoadingState = [[UIView alloc] initWithFrame:self.bounds];
- _viewLoadingState.autoresizingMask = UIViewAutoresizingFlexibleHeight | UIViewAutoresizingFlexibleWidth;
-
- UIActivityIndicatorView *indicator = [[UIActivityIndicatorView alloc] initWithFrame:CGRectMake(20, 0, 30, 30)];
- indicator.activityIndicatorViewStyle = UIActivityIndicatorViewStyleGray;
- [indicator startAnimating];
-
-
- UILabel *label = [[UILabel alloc] initWithFrame:CGRectMake(60, 0, 100, 20)];
- label.text = ASLocalizedString(@"加载中...");
- label.font = [UIFont systemFontOfSize:13.0];
- label.textColor = [UIColor blackColor];
- label.backgroundColor = [UIColor clearColor];
- label.textAlignment = NSTextAlignmentLeft;
-
-
- label.center = CGPointMake(self.bounds.size.width/2.0+50, indicator.center.y+40);
-
- [_viewLoadingState addSubview:indicator];
- [_viewLoadingState addSubview:label];
- indicator.tag = 11;
- label.tag = 12;
- }
- if (self.numberOfSections > 0 && [self numberOfRowsInSection:0]) {
- // 有内容时不显示loading
- }
- else
- {
- [self addSubview:_viewLoadingState];
- [(UIActivityIndicatorView *)[_viewLoadingState viewWithTag:11] startAnimating];
- }
-
-
- // 不同时出现加载失败
- [self setLoadFailed:NO];
- }
- else {
- if (_viewLoadingState.superview) {
- [(UIActivityIndicatorView *)[_viewLoadingState viewWithTag:11] stopAnimating];
- [_viewLoadingState removeFromSuperview];
- }
-
- }
-
- }
- - (void)setLoadFailed:(BOOL)isFailed {
-
- if (isFailed) {
- if (!_viewLoadFailed) {
- UIView *faildView = [[UIView alloc] initWithFrame:self.bounds];
- faildView.backgroundColor = [UIColor colorWithRed:17/255.0 green:17/255.0 blue:17/255.0 alpha:1.0];
- faildView.autoresizingMask = UIViewAutoresizingFlexibleHeight | UIViewAutoresizingFlexibleWidth;
-
-
- UILabel *faildTitle = [[UILabel alloc] initWithFrame:CGRectMake(0, 0, 200, 22)];
- faildTitle.textColor = [UIColor colorWithRed:129/255.0 green:129/255.0 blue:129/255.0 alpha:1.0];
- faildTitle.backgroundColor = [UIColor clearColor];
- faildTitle.font = [UIFont systemFontOfSize:14];
- faildTitle.textAlignment = NSTextAlignmentCenter;
- faildTitle.text = ASLocalizedString(@"网络未连接");
-
- UILabel *faildMsg = [[UILabel alloc] initWithFrame:CGRectMake(0, 0, 200, 20)];
- faildMsg.textColor = faildTitle.textColor;
- faildMsg.backgroundColor = [UIColor clearColor];
- faildMsg.font = [UIFont systemFontOfSize:12];
- faildMsg.textAlignment = NSTextAlignmentCenter;
- faildMsg.text = ASLocalizedString(@"请检查网络后重新加载页面");
-
- faildTitle.center = CGPointMake(self.bounds.size.width/2.0, self.bounds.size.height * 0.3);
- faildMsg.center = CGPointMake(faildTitle.center.x, faildTitle.center.y + 30);
-
- // 重新加载 按钮
- UIButton *retryBtn = [UIButton buttonWithType:UIButtonTypeCustom];
- [retryBtn setBackgroundImage:[[UIImage imageNamed:@"btn_pub_rect_green"] resizableImageWithCapInsets:UIEdgeInsetsMake(7, 7, 7, 7)]
- forState:UIControlStateNormal];
- retryBtn.frame = CGRectMake(0, 0, 100, 25);
- [retryBtn setTitle:ASLocalizedString(@"重新加载")forState:UIControlStateNormal];
- retryBtn.titleLabel.font = [UIFont systemFontOfSize:12];
- retryBtn.center = CGPointMake(faildTitle.center.x, faildMsg.center.y + 50);
- [retryBtn addTarget:self action:@selector(onReload:) forControlEvents:UIControlEventTouchUpInside];
-
- [faildView addSubview:faildTitle];
- [faildView addSubview:faildMsg];
- [faildView addSubview:retryBtn];
-
- _viewLoadFailed = faildView;
-
- }
- [self addSubview:_viewLoadFailed];
-
- // 不同时出现 loading
- [self showLoadingView:NO];
- }
- else {
- if (_viewLoadFailed.superview) {
- [_viewLoadFailed removeFromSuperview];
- }
- }
-
- }
- #pragma mark - override
- - (void)reloadData {
- [super reloadData];
- if (self.dataSource && [self.dataSource respondsToSelector:@selector(tableView:numberOfRowsInSection:)]) {
- if ([self.dataSource respondsToSelector:@selector(numberOfSectionsInTableView:)]) {
- if ([self.dataSource numberOfSectionsInTableView:self] > 0 && [self.dataSource tableView:self numberOfRowsInSection:0] > 0) {
- [self setLoadFailed:NO];
- [self showLoadingView:NO];
- [self setNoData:NO];
- }
- }
- else {
- if ( [self.dataSource tableView:self numberOfRowsInSection:0] > 0 ) {
- [self setLoadFailed:NO];
- [self showLoadingView:NO];
- [self setNoData:NO];
- }
- }
-
- }
- }
- - (void)layoutSubviews {
-
- [super layoutSubviews];
- if (_viewLoadingState && _viewLoadingState.superview) {
- UIView *imgvLoading = [_viewLoadingState viewWithTag:11];
- UIView *label = [_viewLoadingState viewWithTag:12];
- imgvLoading.center = CGPointMake(self.bounds.size.width / 2.0 - 20, self.bounds.size.height / 2.0 - 30);
- label.center = CGPointMake(imgvLoading.center.x + 15 + label.frame.size.width / 2.0, imgvLoading.center.y);
- }
- }
- #pragma mark - Private
- - (void)onReload:(UIButton *)sender {
- if (self.delegate && [self.delegate respondsToSelector:@selector(refreshTableViewLoadNew:)]) {
- [self.delegate performSelector:@selector(refreshTableViewLoadNew:) withObject:self];
- }
- [_viewLoadFailed removeFromSuperview];
- }
- #pragma mark - MJRefresh
- - (void)loadNew
- {
- if (self.delegate && [self.delegate respondsToSelector:@selector(refreshTableViewLoadNew:)]) {
- [self.delegate performSelector:@selector(refreshTableViewLoadNew:) withObject:self];
- }
- }
- - (void)loadMore
- {
- if (self.delegate && [self.delegate respondsToSelector:@selector(refreshTableViewLoadmore:)]) {
- [self.delegate performSelector:@selector(refreshTableViewLoadmore:) withObject:self];
- }
- }
- @end
|