第十二章:表视图常用UI范例——下拉刷新+无限滚动

来源:互联网 发布:cip数据查询 编辑:程序博客网 时间:2024/05/06 09:23

1.使用UIRefreshControl实现下拉刷新

//声明下拉刷新    self.refreshControl = [[UIRefreshControl alloc] init];    //赋予动作执行    [self.refreshControl addTarget:self action:@selector(refreshedByPullingTable:) forControlEvents:UIControlEventValueChanged];

//使用UIRefreshControl实现下拉刷新- (void) refreshedByPullingTable:(id)sender{    //开始执行    [self.refreshControl beginRefreshing];        //模拟延迟,    double delayInSeconds = 2.0;    dispatch_time_t popTime = dispatch_time(DISPATCH_TIME_NOW, (int64_t)(delayInSeconds * NSEC_PER_SEC));    dispatch_after(popTime, dispatch_get_main_queue(), ^(void){        //下拉刷新结束        [self.refreshControl endRefreshing];    });}


2.无限滚动

首先需要引用:EgoRefreshTableHeaderView,PullToRefreshViewController

.h 文件:注意继承父类

#import <UIKit/UIKit.h>#import "PullToRefreshViewController.h"//必须继承@interface ViewController : PullToRefreshViewController@end

.m文件:

#import "ViewController.h"@interface ViewController ()@property (assign,nonatomic) int pageCount;@end@implementation ViewController@synthesize  pageCount = _pageCount;- (void)viewDidLoad{    [super viewDidLoad];// Do any additional setup after loading the view, typically from a nib.        //现在拥有几个片段    self.numberOfSections = 1;    //标示现在是第几页    self.pageCount = 1;    //标题    self.title = NSLocalizedString(@"Infinite Scrolling", @"");    //设置导航-标题栏是否透明    self.navigationController.navigationBar.translucent = NO;    }- (void)didReceiveMemoryWarning{    [super didReceiveMemoryWarning];    // Dispose of any resources that can be recreated.}//下拉刷新的方法- (void) doRefresh{    //仅仅是模拟延时,使用时需要替换为需要的方法    double 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.loading = NO;    });}//无限滚动的方法- (void)loadMore{    //模拟延时    double delayInSeconds = 2.0;    dispatch_time_t popTime = dispatch_time(DISPATCH_TIME_NOW, (int64_t)(delayInSeconds * NSEC_PER_SEC));    dispatch_after(popTime, dispatch_get_main_queue(), ^(void){        //刷新后,当前页+1        self.pageCount++;        //如果当前到第五页了,则停止无限滚动        if(self.pageCount==5) self.endReached = YES;        //重新加载数据。        [self.tableView reloadData];    });}- (NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section{        if(section == self.numberOfSections)    {        //直接调用父类 PullToRefreshViewController中 的方法。        //片段加一(可以看下 PullToRefreshViewController.m 中方法的详细)        return  [super tableView:tableView numberOfRowsInSection:section];    }    //根据有多少页,返回相应的记录数    return 20*self.pageCount;}- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath{        if(indexPath.section==self.numberOfSections)    {        //直接调用父类 PullToRefreshViewController中 的方法。        //设置最后一行为:加载更多        return [super tableView:tableView cellForRowAtIndexPath:indexPath];    }        static NSString *CellIdentifier = @"Cell";    UITableViewCell *cell =[tableView dequeueReusableCellWithIdentifier:CellIdentifier];    if(!cell)    {        cell = [[UITableViewCell alloc] init];    }        cell.textLabel.text = [NSString stringWithFormat:@"Row %d",indexPath.row];    return cell;}@end


0 0