• 上拉下拉基类


    #import <UIKit/UIKit.h>

    #import "SVPullToRefresh.h"

    #import "YQZViewController.h"

    @interface YQZPullViewController : YQZViewController

    {

        IBOutlet UITableView *contentTableView;

        NSMutableArray *dataSource;

        IBOutlet UIView *emptyDataView;

        IBOutlet UIImageView* emptyImgView;

        IBOutlet UILabel *emptyDataLabel;

        int currentPage;

    }

    @property (nonatomic, strong) IBOutlet UITableView *contentTableView;

    @property (nonatomic, strong) IBOutlet UIView *emptyDataView;

    @property (nonatomic, strong) IBOutlet UIImageView* emptyImgView;

    @property (nonatomic, strong) IBOutlet UILabel *emptyDataLabel;

    @property (nonatomic, strong) UISegmentedControl *segmentControl;

    //进行中新进展数字标签

    @property (nonatomic, strong) UILabel *unFinishedLabel;

    //已完成新进展数字标签

    @property (nonatomic, strong) UILabel *finishedlabel;

    //未读数字标签

    @property (nonatomic, strong) UILabel *unReadlabel;

    @property (nonatomic, strong) NSMutableArray *dataSource;

    @property (nonatomic, assign) int currentPage;

    @property (nonatomic, assign) int totalPages;

    - (void)insertRowAtTop:(NSArray *)newDatas;

    - (void)insertRowAtBottom:(NSArray *)newDatas;

    - (void)upRefresh;

    - (void)bottomRefresh;

    - (void)addSegmentControl;

    - (void)addSegmentControlWithArray:(NSArray *)segmentArray;

    - (void)addUnReadControl;

    - (void)setSegmentNumValue:(NSInteger)unfinishValue finishValue:(NSInteger)finishValue;

    - (void)showToast:(NSString *)text;

    - (void)resetUIConstraint;

    @end

    #import "YQZPullViewController.h"

    #import "SDWebImageManager.h"

    @interface YQZPullViewController ()<UITableViewDataSource, UITableViewDelegate>

    @end

    @implementation YQZPullViewController

    @synthesize contentTableView;

    @synthesize emptyDataView;

    @synthesize emptyImgView;

    @synthesize emptyDataLabel;

    @synthesize dataSource;

    @synthesize currentPage;

    @synthesize totalPages;

    - (id)initWithNibName:(NSString *)nibNameOrNil bundle:(NSBundle *)nibBundleOrNil

    {

        self = [super initWithNibName:nibNameOrNil bundle:nibBundleOrNil];

        if (self) {

            // Custom initialization

            self.dataSource = [NSMutableArray array];

            self.currentPage = 0;

        }

        return self;

    }

    - (void)viewDidLoad

    {

        [super viewDidLoad];

        

        self.contentTableView = [[UITableView alloc] initWithFrame:self.view.frame style:UITableViewStylePlain];

        self.contentTableView.delegate = self;

        self.contentTableView.dataSource = self;

        self.contentTableView.backgroundColor = kYQZLightGrayColor;

        [self.view addSubview:self.contentTableView];

        

        __weak YQZPullViewController *weakself = self;

        [self.contentTableView addPullToRefreshWithActionHandler:^{

            [weakself upRefresh];

        }];

        

        // setup infinite scrolling

        [self.contentTableView addInfiniteScrollingWithActionHandler:^{

            [weakself bottomRefresh];

        }];

        if(emptyDataView == nil)

        {

            emptyDataView = [[UIView alloc]init];

            [self.view addSubview:emptyDataView];

        }

        if (emptyImgView == nil) {

            emptyImgView = [[UIImageView alloc]init];

            [emptyDataView addSubview:emptyImgView];

        }

        if (emptyDataLabel == nil) {

            emptyDataLabel = [[UILabel alloc]init];

            [emptyDataLabel setTextColor:[UIColor lightGrayColor]];

            [emptyDataLabel setFont:[UIFont systemFontOfSize:13]];

            [emptyDataView addSubview:emptyDataLabel];

        }

    }

    - (void)didReceiveMemoryWarning

    {

        [super didReceiveMemoryWarning];

    }

    - (void)resetUIConstraint

    {

        self.contentTableView.translatesAutoresizingMaskIntoConstraints = NO;

        [self.view addConstraints:[NSLayoutConstraint constraintsWithVisualFormat:@"V:|-0-[contentTableView]-0-|" options:0 metrics:nil views:NSDictionaryOfVariableBindings(contentTableView)]];

        [self.view addConstraints:[NSLayoutConstraint constraintsWithVisualFormat:@"H:|-0-[contentTableView]-0-|" options:0 metrics:nil views:NSDictionaryOfVariableBindings(contentTableView)]];

        self.contentTableView.backgroundColor = kYQZLightGrayColor;

        self.contentTableView.separatorStyle = UITableViewCellSeparatorStyleNone;

        

        self.emptyDataView.translatesAutoresizingMaskIntoConstraints = NO;

        self.emptyImgView.translatesAutoresizingMaskIntoConstraints = NO;

        self.emptyDataLabel.translatesAutoresizingMaskIntoConstraints = NO;

        [self.view addConstraints:[NSLayoutConstraint constraintsWithVisualFormat:@"H:|-0-[emptyDataView]-0-|" options:0 metrics:nil views:NSDictionaryOfVariableBindings(emptyDataView)]];

        [self.view addConstraints:[NSLayoutConstraint constraintsWithVisualFormat:@"V:|-0-[emptyDataView]-0-|" options:0 metrics:nil views:NSDictionaryOfVariableBindings(emptyDataView)]];

        

        [emptyDataView addConstraint:[NSLayoutConstraint constraintWithItem:emptyImgView attribute:NSLayoutAttributeCenterX relatedBy:NSLayoutRelationEqual toItem:emptyDataView attribute:NSLayoutAttributeCenterX multiplier:1 constant:0]];

        [emptyDataView addConstraint:[NSLayoutConstraint

                                  constraintWithItem:emptyImgView

                                  attribute:NSLayoutAttributeTop

                                  relatedBy:NSLayoutRelationEqual

                                  toItem:emptyDataView

                                  attribute:NSLayoutAttributeTop

                                  multiplier:1.0f

                                  constant:82.0f]];

        

        [emptyDataView addConstraint:[NSLayoutConstraint constraintWithItem:emptyDataLabel attribute:NSLayoutAttributeCenterX relatedBy:NSLayoutRelationEqual toItem:emptyDataView attribute:NSLayoutAttributeCenterX multiplier:1 constant:0]];

        [emptyDataView addConstraint:[NSLayoutConstraint

                                  constraintWithItem:emptyDataLabel

                                  attribute:NSLayoutAttributeTop

                                  relatedBy:NSLayoutRelationEqual

                                  toItem:emptyDataView

                                  attribute:NSLayoutAttributeTop

                                  multiplier:1.0f

                                  constant:162.0f]];

    }

    - (void)upRefresh{

        [self.contentTableView setShowsInfiniteScrolling:false];

    }

    - (void)bottomRefresh{

    //    [self.contentTableView setShowsPullToRefresh:false];

    }

    - (void)showToast:(NSString *)text

    {

        [YQZTools showToast:text inView:self.contentTableView.superview];

    }

    - (void)showToast:(NSString *)text (float)width

    {

        YQZToast *toast = [[YQZToast alloc] initWithFrame:CGRectMake((self.view.frame.size.width - width)/2, self.view.frame.size.height - 100, width, 30)];

        toast.text = text;

        [toast showInView:self.contentTableView];

    }

    #pragma mark - public function -

    //给navigationBar添加segment控件

    - (void)addSegmentControl

    {

        NSArray *segmentArray = @[@"进行中", @"已完成"];

        UIView *segmentView = [[UIView alloc] initWithFrame:CGRectMake(0, 0, 130, 30)];

        self.segmentControl = [[UISegmentedControl alloc] initWithItems:segmentArray];

        self.segmentControl.frame = CGRectMake(0, 0, 130, 30);

        self.segmentControl.selectedSegmentIndex = 0;

        self.segmentControl.tintColor = [UIColor whiteColor];

        self.segmentControl.segmentedControlStyle = UISegmentedControlStylePlain;

        NSDictionary *dic = [NSDictionary dictionaryWithObjectsAndKeys:[UIFont systemFontOfSize:15.f],UITextAttributeFont, nil];

        [self.segmentControl setTitleTextAttributes:dic forState:UIControlStateNormal];

        [segmentView addSubview:self.segmentControl];

        self.navigationItem.titleView = segmentView;

        

        //进行中新进展数字标签

        self.unFinishedLabel = [[UILabel alloc] initWithFrame:CGRectMake(-8, 3, 16, 16)];

        self.unFinishedLabel.font = [UIFont systemFontOfSize:10.f];

        self.unFinishedLabel.textColor = [UIColor whiteColor];

        self.unFinishedLabel.backgroundColor = kYQZRowNumberRedColor;

        self.unFinishedLabel.layer.cornerRadius = 8;

        self.unFinishedLabel.textAlignment = NSTextAlignmentCenter;

        self.unFinishedLabel.clipsToBounds = YES;

        self.unFinishedLabel.hidden = YES;

        [segmentView addSubview:self.unFinishedLabel];

        

        //已完成新进展数字标签

        self.finishedlabel = [[UILabel alloc] initWithFrame:CGRectMake(122, 3, 16, 16)];

        self.finishedlabel.font = [UIFont systemFontOfSize:10.f];

        self.finishedlabel.textColor = [UIColor whiteColor];

        self.finishedlabel.backgroundColor = kYQZRowNumberRedColor;

        self.finishedlabel.layer.cornerRadius = 8;

        self.finishedlabel.textAlignment = NSTextAlignmentCenter;

        self.finishedlabel.clipsToBounds = YES;

        self.finishedlabel.hidden = YES;

        [segmentView addSubview:self.finishedlabel];

    }

    - (void)addSegmentControlWithArray:(NSArray *)segmentArray

    {

        UIView *segmentView = [[UIView alloc] initWithFrame:CGRectMake(0, 0, 130, 30)];

        self.segmentControl = [[UISegmentedControl alloc] initWithItems:segmentArray];

        self.segmentControl.frame = CGRectMake(0, 0, 130, 30);

        self.segmentControl.selectedSegmentIndex = 0;

        self.segmentControl.tintColor = [UIColor whiteColor];

        self.segmentControl.segmentedControlStyle = UISegmentedControlStylePlain;

        NSDictionary *dic = [NSDictionary dictionaryWithObjectsAndKeys:[UIFont systemFontOfSize:15.f],UITextAttributeFont, nil];

        [self.segmentControl setTitleTextAttributes:dic forState:UIControlStateNormal];

        [segmentView addSubview:self.segmentControl];

        self.navigationItem.titleView = segmentView;

    }

    - (void)addUnReadControl

    {

        UIView *segmentView = [[UIView alloc] initWithFrame:CGRectMake(130, 0, 30, 30)];

        //已完成新进展数字标签

        self.unReadlabel = [[UILabel alloc] initWithFrame:CGRectMake(0, 3, 16, 16)];

        self.unReadlabel.font = [UIFont systemFontOfSize:10.f];

        self.unReadlabel.textColor = [UIColor whiteColor];

        self.unReadlabel.backgroundColor = kYQZRowNumberRedColor;

        self.unReadlabel.layer.cornerRadius = 8;

        self.unReadlabel.textAlignment = NSTextAlignmentCenter;

        self.unReadlabel.clipsToBounds = YES;

        self.unReadlabel.hidden = NO;

        [segmentView addSubview:self.unReadlabel];

        

        [self.navigationItem.titleView addSubview:segmentView];

    }

    - (void)setSegmentNumValue:(NSInteger)unfinishValue finishValue:(NSInteger)finishValue

    {

        if (unfinishValue > 0) {

            if (unfinishValue > 99) {

                self.unFinishedLabel.frame = CGRectMake(-10, 3, 20, 16);

            }

            self.unFinishedLabel.text = [YQZUtility getDisPlayNumString:unfinishValue];

            self.unFinishedLabel.hidden = NO;

        }

        else

        {

            self.unFinishedLabel.hidden = YES;

        }

        

        if (finishValue > 0) {

            if (finishValue > 99) {

                self.finishedlabel.frame = CGRectMake(120, 3, 20, 16);

            }

            self.finishedlabel.text = [YQZUtility getDisPlayNumString:finishValue];

            self.finishedlabel.hidden = NO;

        }

        else

        {

            self.finishedlabel.hidden = YES;

        }

    }

    #pragma mark -

    #pragma mark UITableViewDataSource

    - (NSInteger)numberOfSectionsInTableView:(UITableView *)tableView

    {

        return self.dataSource.count;

    }

    - (NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section

    {

        return 1;

    }

    - (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath {

        static NSString *identifier = @"Cell";

        UITableViewCell *cell = [self.contentTableView dequeueReusableCellWithIdentifier:identifier];

        

        if (cell == nil){

                cell = [[UITableViewCell alloc] initWithStyle:UITableViewCellStyleDefault reuseIdentifier:identifier];

        }

        cell.textLabel.text = [NSString stringWithFormat:@"%ld,%ld",[indexPath section], [indexPath row]];

        return cell;

    }

    - (void)insertRowAtTop:(NSArray *)newDatas {

        

        int64_t delayInSeconds = 2.0;

        dispatch_time_t popTime = dispatch_time(DISPATCH_TIME_NOW, delayInSeconds * NSEC_PER_SEC);

        dispatch_after(popTime, dispatch_get_main_queue(), ^(void){

            [self.contentTableView beginUpdates];

            NSRange range = NSMakeRange(0, [newDatas count]);

            NSIndexSet *indexSet = [NSIndexSet indexSetWithIndexesInRange:range];

            [self.dataSource insertObjects:newDatas atIndexes:indexSet];

            NSMutableArray *indexPaths = [NSMutableArray array];

            for (NSInteger i = 0; i < [newDatas count]; i++) {

                [indexPaths addObject:[NSIndexPath indexPathForRow:i inSection:0]];

            }

            [self.contentTableView insertRowsAtIndexPaths:indexPaths withRowAnimation:UITableViewRowAnimationBottom];

            [self.contentTableView endUpdates];

            

            [self.contentTableView.pullToRefreshView stopAnimating];

        });

      

    }

    - (void)insertRowAtBottom:(NSArray *)newDatas {

        

        int64_t delayInSeconds = 2.0;

        dispatch_time_t popTime = dispatch_time(DISPATCH_TIME_NOW, delayInSeconds * NSEC_PER_SEC);

        dispatch_after(popTime, dispatch_get_main_queue(), ^(void){

            [self.contentTableView beginUpdates];

            NSInteger oldCount = [self.dataSource count];

            [self.dataSource addObjectsFromArray:newDatas];

            

             NSMutableArray *indexPaths = [NSMutableArray array];

            for (NSInteger i = 0; i < [newDatas count]; i++) {

                [indexPaths addObject:[NSIndexPath indexPathForRow:(i + oldCount) inSection:0]];

            }

            

            [self.contentTableView insertRowsAtIndexPaths:indexPaths withRowAnimation:UITableViewRowAnimationTop];

            [self.contentTableView endUpdates];

            

            [self.contentTableView.infiniteScrollingView stopAnimating];

        });

    }

    @end

    使用方法:

    从该类继承后 复写4个方法

    #pragma mark--------------------------------------------------------

    #pragma mark 请求刷新方法

    - (void)loadTopData

    {

        currentPage = 1;

        [self loadListData:1];

    }

    - (void)loadBottomData

    {

        currentPage = currentPage + 1;

        

        [self loadListData:currentPage];

        

    //    [self.contentTableView.infiniteScrollingView stopAnimating];

    }

    - (void)upRefresh

    {

        [super upRefresh];

        

        [self loadTopData];

    }

    - (void)bottomRefresh

    {

        [super bottomRefresh];

        

        if (self.currentPage < self.totalPages)

        {

            [self loadBottomData];

        }

        else

        {

            [self.contentTableView.infiniteScrollingView stopAnimating];

            if (self.totalPages > 0) {

                //无数据提示

            }

        }

    }

  • 相关阅读:
    Enterprise Library Step By Step系列(一):配置应用程序块——入门篇
    Enterprise Library Step By Step系列(八):日志和监测应用程序块——进阶篇
    在ASP.NET页面中冻结DataGrid的列或头部
    数据库设计技巧系列(五)——各种小技巧
    用任务计划实现数据库的异地备份
    如何更好的与人沟通?[图]
    在Asp.net中如何用SQLDMO来获取SQL Server中的对象信息
    SQL Server 2012 Express LocalDB
    Clay: 创建和使用深层次对象图
    VS 2012 的 单元测试 和 测试资源管理器
  • 原文地址:https://www.cnblogs.com/lvlin/p/5713298.html
Copyright © 2020-2023  润新知