zoukankan      html  css  js  c++  java
  • UITableView 上拉刷新控件

    .h 文件

    #import <UIKit/UIKit.h>
    
    @protocol RefreshTableFooterViewDelegate;
    @interface RefreshTableFooterView : UIView
    @property (nonatomic, weak) id<RefreshTableFooterViewDelegate> delegate;
    
    // 实现ScrollViewDelegate 后在对应的 didEndingDragging 方法中调用
    -(void)refreshFooterScrollViewDidEndDragging:(UIScrollView *)scrollView;
    
    // 在重新刷新 tableView 后调用
    -(void)refreshFooterViewDataSourceDidFinishedLoading:(UIScrollView*)scrollView;
    
    // 在重新刷新 tableView 之前调用
    -(void)refreshFooterViewShouldBeHiddenBeforeDataSourceReloadNewData;
    @end
    
    @protocol RefreshTableFooterViewDelegate <NSObject>
    
    -(void)refreshTableFooterViewTriggerRefresh;
    -(BOOL)refreshTableFooterViewIsLoading;
    -(BOOL)refreshTableFooterViewHasMore;
    
    @end
    
    

    .m 文件

    #import "RefreshTableFooterView.h"
    
    @implementation RefreshTableFooterView
    {
        UIActivityIndicatorView *_indicatorView;
        UILabel *_descriptionLabel;
        BOOL _isLastPage;
        BOOL _hasRefreshed;
    }
    
    -(instancetype)initWithFrame:(CGRect)frame {
        self = [super initWithFrame:frame];
        if (self) {
            CGFloat yAxis = 3;
            CGFloat width = 200;
            
            _indicatorView = [[UIActivityIndicatorView alloc] initWithActivityIndicatorStyle:UIActivityIndicatorViewStyleGray];
            _indicatorView.frame = CGRectMake((CGRectGetWidth(self.bounds) - 200)/2 - CGRectGetWidth(_indicatorView.bounds), yAxis, CGRectGetWidth(_indicatorView.bounds), CGRectGetHeight(_indicatorView.bounds));
            _indicatorView.hidesWhenStopped = YES;
            [self addSubview:_indicatorView];
            [_indicatorView stopAnimating];
            
            _descriptionLabel = [[UILabel alloc] initWithFrame:CGRectMake((CGRectGetWidth(self.bounds) - 200)/2, yAxis, width, CGRectGetHeight(_indicatorView.bounds))];
            _descriptionLabel.text = @"上拉刷新";
            _descriptionLabel.textAlignment = NSTextAlignmentCenter;
            _descriptionLabel.textColor = [UIColor lightGrayColor];
            [self addSubview:_descriptionLabel];
        }
        return self;
    }
    
    -(void)refreshFooterScrollViewDidEndDragging:(UIScrollView *)scrollView
    {
        if (!self.delegate ||
            ![self.delegate respondsToSelector:@selector(refreshTableFooterViewIsLoading)] ||
            [self.delegate refreshTableFooterViewIsLoading]) {
            return;
        }
        
        if (![self.delegate refreshTableFooterViewHasMore]) {
            _descriptionLabel.text = @"已经加载所有~";
            return;
        }
        
        CGFloat contentHeight = scrollView.contentSize.height;
        CGFloat offsetY = scrollView.contentOffset.y;
        CGFloat containerHeight = scrollView.bounds.size.height;
        BOOL refreshOrNot = containerHeight + offsetY > contentHeight - 0;
        if (refreshOrNot && [self.delegate respondsToSelector:@selector(refreshTableFooterViewTriggerRefresh)]) {
            [self.delegate refreshTableFooterViewTriggerRefresh];
            _descriptionLabel.text = @"加载中...";
            _indicatorView.hidden = NO;
            [_indicatorView startAnimating];
            [scrollView setContentInset:UIEdgeInsetsMake(.0, 50.0, .0, .0)];
        }
    }
    
    -(void)refreshFooterViewShouldBeHiddenBeforeDataSourceReloadNewData {
        self.hidden = YES;
    }
    
    -(void) refreshFooterViewDataSourceDidFinishedLoading:(UIScrollView *)scrollView {
        [scrollView setContentInset:UIEdgeInsetsMake(.0, .0, .0, .0)];
        CGRect original = self.frame;
        original.origin.y = scrollView.contentSize.height > scrollView.bounds.size.height ? scrollView.contentSize.height : scrollView.bounds.size.height;
        self.frame = original;
        self.hidden = NO;
        [_indicatorView stopAnimating];
        _descriptionLabel.text = @"上拉刷新";
    }
    
    
    @end
    
    
    
  • 相关阅读:
    bzoj 3035 二分答案+二分图最大匹配
    bzoj 1058 bst
    bzoj 1093 缩点+DP
    bzoj 1452 二维树状数组
    bzoj 1968 数学
    bzoj 1034 贪心
    牛客小白月赛12 I (tarjan求割边)
    Loj 103、10043 (KMP统计子串个数)
    poj 2356 (抽屉原理)
    hdu 1907 (尼姆博弈)
  • 原文地址:https://www.cnblogs.com/1oo1/p/4383949.html
Copyright © 2011-2022 走看看