UITableView底部FooterView实现上拉刷新

转载自:http://carlme.blog.163.com/blog/static/183716327201272421728204/

@interface FooterViewTestViewController : UIViewController <UITableViewDataSource, UITableViewDelegate>{

// 表格数据数组,因为是演示代码,直接定义为数组
NSMutableArray *tableData;

// 下拉时显示的数据
NSMutableArray *tableMoreData;

// 数据数量
NSUInteger dataNumber;

// 加载状态
BOOL _loadingMore;

UITableView *table;
}

@property (nonatomic, retain) UITableView *table;
@property (nonatomic, retain) NSMutableArray *tableData;
@property (nonatomic, retain) NSMutableArray *tableMoreData;

// 创建表格底部
- (void) createTableFooter;

// 开始加载数据
- (void) loadDataBegin;

// 加载数据中
- (void) loadDataing;

// 加载数据完毕
- (void) loadDataEnd;

@end

@implementation FooterViewTestViewController

@synthesize table;
@synthesize tableData;
@synthesize tableMoreData;

- (void)viewDidLoad {

    [super viewDidLoad];

  table = [[UITableView alloc] initWithFrame:CGRectMake(0, 0, 320, 460) style:UITableViewStylePlain];
  table.delegate = self;
  table.dataSource = self;
  [self.view addSubview:table];

  tableData = [[NSMutableArray alloc] initWithObjects:
@"January",@"February",@"March",@"April",@"May",@"June",
@"July",@"August",@"September",@"October",@"November",@"December",nil];

  tableMoreData = [[NSMutableArray alloc] initWithObjects:@"BAIDU",@"GOOGLE",@"FACEBOOK",@"YAHOO",nil];
  [self createTableFooter];
}

#pragma mark -
#pragma mark Table view data source
// Customize the number of sections in the table view.
- (NSInteger)numberOfSectionsInTableView:(UITableView *)tableView {
    return 1;
}

// Customize the number of rows in the table view.
- (NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section {
    return [tableData count];
}

// Customize the appearance of table view cells.
- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath {
    static NSString *CellIdentifier = @"Cell";

    UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:CellIdentifier];
    if (cell == nil) {
        cell = [[[UITableViewCell alloc] initWithStyle:UITableViewCellStyleDefault reuseIdentifier:CellIdentifier] autorelease];
    }

  cell.textLabel.text = [tableData objectAtIndex:indexPath.row];
    return cell;
}

- (void)scrollViewDidEndDragging:(UIScrollView *)scrollView willDecelerate:(BOOL)decelerate
{
    // 下拉到最底部时显示更多数据
  if(!_loadingMore && scrollView.contentOffset.y > ((scrollView.contentSize.height - scrollView.frame.size.height)))
  {
    [self loadDataBegin];
  }
}

// 开始加载数据
- (void) loadDataBegin{
    if (_loadingMore == NO)
    {
        _loadingMore = YES;

        UIActivityIndicatorView *tableFooterActivityIndicator = [[UIActivityIndicatorView alloc] initWithFrame:CGRectMake(75.0f, 10.0f, 20.0f, 20.0f)];
        [tableFooterActivityIndicator setActivityIndicatorViewStyle:UIActivityIndicatorViewStyleGray];
        [tableFooterActivityIndicator startAnimating];
        [self.table.tableFooterView addSubview:tableFooterActivityIndicator];

    [self loadDataing];

    }
}

// 加载数据中
- (void) loadDataing
{
  dataNumber = [tableData count];
  for (int x = 0; x < [tableMoreData count]; x++)
  {
    [tableData addObject:[tableMoreData objectAtIndex:x]];
  }

  [[self table] reloadData];
  [self loadDataEnd];
}

// 加载数据完毕
- (void) loadDataEnd{
  _loadingMore = NO;
  [self createTableFooter];
}

// 创建表格底部
- (void) createTableFooter{

    self.table.tableFooterView = nil;
    UIView *tableFooterView = [[UIView alloc] initWithFrame:CGRectMake(0.0f, 0.0f, self.table.bounds.size.width, 40.0f)];
    UILabel *loadMoreText = [[UILabel alloc] initWithFrame:CGRectMake(0.0f, 0.0f, 116.0f, 40.0f)];
    [loadMoreText setCenter:tableFooterView.center];
    [loadMoreText setFont:[UIFont fontWithName:@"Helvetica Neue" size:14]];
    [loadMoreText setText:@"上拉显示更多数据"];
    [tableFooterView addSubview:loadMoreText];    

    self.table.tableFooterView = tableFooterView;
}

@end
时间: 2024-10-15 09:25:37

UITableView底部FooterView实现上拉刷新的相关文章

使用MJRefresh遇到的一个问题,上拉刷新后tableview瞬间滑到最底部

最近用MJRefresh上拉刷新时遇到一个问题,就是上拉刷新后,tableview会瞬间滑到最底部,用户还要往回翻才能看到新刷出来的数据,体验十分不好.查了很久没找到原因,最后发现在refreshview停止动画前,我代码里调用了两次tableview reloaddata,抱着尝试的心理,我改了代码结构,删除了一个tableview reloaddata,结果还真被我蒙对了!原因不明,可能是tableview的一个小bug,也可能是我的 MJRefreshView版本太老,是时候更新一下这个第

Android UI之下拉刷新上拉刷新实现

在实际开发中我们经常要用到上拉刷新和下拉刷新,因此今天我写了一个上拉和下拉刷新的demo,有一个自定义的下拉刷新控件 只需要在布局文件中直接引用就可以使用,非常方便,非常使用,以下是源代码: 自定义的ListView RTPullListView 1 package com.ryantang.pulllistview; 2 3 import java.util.Date; 4 5 import android.content.Context; 6 import android.util.Attr

iOS开发项目篇—32添加上拉刷新数据

iOS开发项目篇—32添加上拉刷新数据 一.简单说明 图片示意 思路:可以自定义一个view(示意xib),在view中添加一个label和菊花,指示状态.把这个view设置为tableView的底部视图. 二.实现过程 1.新建一个类和xib,关联 (1)创建一个类,让其继承自UIView (2)创建一个xib文件,用来定义上拉提示框 (3)定义的xib文件,把类和xib文件进行关联 2.实现代码: YYlaodStatusesFooter.h文件 1 // 2 // YYlaodStatus

上拉刷新下拉加载

拉刷新和下拉刷新的两种方法(包括使用第三方库MJRefresh)一.使用苹果原生的方法 1.下拉刷新 2.上拉刷新 (1 首先要新建一个footer得XIB文件,当然同时包括对应的控制器文件,例如在XIB文件中可以如下拖拉对应的控件 (2 然后在代码文件中写一个实例方法+(instancetype)footer{ return [[[NSBundle mainBundle] loadNibNamed:@"XIB文件名" owner:nil options:nil]lastObject]

上拉刷新和下拉刷新的两种方法(包括使用第三方库MJRefresh)

一.使用苹果原生的方法 1.下拉刷新 2.上拉刷新 (1 首先要新建一个footer得XIB文件,当然同时包括对应的控制器文件,例如在XIB文件中可以如下拖拉对应的控件 (2 然后在代码文件中写一个实例方法 +(instancetype)footer { return  [[[NSBundle mainBundle] loadNibNamed:@"XIB文件名" owner:nil options:nil] lastObject]; } (3 然后在我们的列表控制器中调用: /** *

SwipeRefreshLayout + RecyclerView 实现 上拉刷新 和 下拉刷新

下拉刷新和上拉刷新都用SwipeRefreshLayout 自带的进度条 布局 <?xml version="1.0" encoding="utf-8"?> <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" xmlns:tools="http://schemas.android.com/tools" android

Android ListView下拉/上拉刷新:设计原理与实现

 <Android ListView下拉/上拉刷新:设计原理与实现> Android上ListView的第三方开源的下拉刷新框架很多,应用场景很多很普遍,几乎成为现在APP的通用设计典范,甚至谷歌官方都索性在Android SDK层面支持下拉刷新,我之前写了一篇文章<Android SwipeRefreshLayout:谷歌官方SDK包中的下拉刷新>专门介绍过(链接地址:http://blog.csdn.net/zhangphil/article/details/4696537

iOS动画进阶 - 实现炫酷的上拉刷新动效(二)

最近撸了一个上拉刷新的小轮子,只要遵循一个协议就能自定义自己动效的上拉刷新和加载,我自己也写了几个动效进去,下面是一个比较好的动效的实现过程 先上效果图和github地址,完整代码个demo和进入查看,有其他好的动效大家也可以学习交流~ 分析动效 写一个动效的第一步就应该仔细的去分析它,把它的每一帧展开来看,找一个最合适的方式来实现它,我们可以把以上动画分解成以下三个步骤: 箭头的绘制和动效 圆环的绘制和小点的旋转 对勾的绘制和动画 以下是会用到主要的类: CAShapeLayer UIBezi

小程序 上拉刷新/下拉加载

小程序项目中上拉刷新下拉加载是比较常见的需求,官方文档也提供了相当友好的API,但是因为API隐藏的比较深,文档描述也比较模糊所以也折腾了一番(官方文档),在此记录一下使用方式 onPullDownRefresh()  //用户下拉刷新事件,onReachBottom() //用户上拉触底事件 onPullDownRefresh和onReachBottom是小程序的页面事件,官方文档描述"需要在app.json的window选项中或页面的json文件中开启enablePullDownRefres