原文:http://www.cnblogs.com/xiaobaizhu/archive/2012/12/01/2797817.html

之前写了一篇用控件实现自定义UITableViewCell的,个人觉得还是用代码实现比较好,这样便于维护,而且重用性高。在网上一搜,完全用代码创建UITableView的帖子少之又少,大多数人觉得用IB用方便,但是如果你对完全使用代码创建空间不熟的话,还是建议你用代码,很熟悉的同学可以忽略。

效果图:

先做一些准备工作:先去https://github.com/enormego/EGOTableViewPullRefresh/downloads下载下拉更新的类,这个类只有两个文件,解压后直接拖到项目中来。记得之后在ViewController.h中导入头文件#import "EGORefreshTableHeaderView.h",还需要导入一个库,叫QuartzCore.framework。

还需要下拉箭头的图片,还是去http://code4app.com/ios/Pull-To-Refresh-TableView/4f681c096803fa2c63000004

下载那个比较完整的项目吧,然后把下拉箭头的图片粘贴过来,大家也可以顺便看看那个项目

下拉框架所需要的准备工作就完成了,接下来是图片异步下载类,下载地址

https://github.com/rs/SDWebImage

这个版本不是最新的,最新的整合成了一个SDWebImage.framework库文件,我尝试了很多次导入成功了,但是运行时会报错,如果有成功运行的同学请告诉我一下哦。

解压之后把SDWebImage文件夹拖到项目中来,里面一共20个文件。

添加两个库:ImageIO.framework和MapKit.framework

如图把Compiler for C/C++/Objective-C 的属性改为Apple LLVM compiler 3.0

最后别忘了导入#import "UIImageView+WebCache.h"头文件

开始写代码!

ViewController.h文件

#import <UIKit/UIKit.h>
#import "EGORefreshTableHeaderView.h"@interface ViewController : UIViewController<UITableViewDelegate,UITableViewDataSource,EGORefreshTableHeaderDelegate>
{//这里别忘了要导入EGORefreshTableHeaderDelegate这个协议,下拉更新必须要用EGORefreshTableHeaderView *_refreshHeaderView;BOOL _reloading;
}
@property (retain,nonatomic)NSArray *imageArray;
@property (retain,nonatomic)UITableView *tableViewImage;
- (void)reloadTableViewDataSource;
- (void)doneLoadingTableViewData;
@end

ViewController.m文件 ,文中的红字是下拉部分用到的代码,绿色文字是异步更新图片用到的代码

#import "ViewController.h"
#import "UIImageView+WebCache.h"@implementation ViewController
@synthesize imageArray;
@synthesize tableViewImage;- (void)didReceiveMemoryWarning
{[super didReceiveMemoryWarning];
}#pragma mark - View lifecycle- (void)viewDidLoad
{[super viewDidLoad];NSArray *array = [NSArray arrayWithObjects: @"http://static2.dmcdn.net/static/video/451/838/44838154:jpeg_preview_small.jpg?20120509163826",@"http://static2.dmcdn.net/static/video/656/177/44771656:jpeg_preview_small.jpg?20120509154705",@"http://static2.dmcdn.net/static/video/629/228/44822926:jpeg_preview_small.jpg?20120509181018",@"http://static2.dmcdn.net/static/video/116/367/44763611:jpeg_preview_small.jpg?20120509101749",@"http://static2.dmcdn.net/static/video/340/086/44680043:jpeg_preview_small.jpg?20120509180118",@"http://static2.dmcdn.net/static/video/666/645/43546666:jpeg_preview_small.jpg?20120412153140",@"http://static2.dmcdn.net/static/video/771/577/44775177:jpeg_preview_small.jpg?20120509183230",@"http://static2.dmcdn.net/static/video/810/508/44805018:jpeg_preview_small.jpg?20120508125339",@"http://static2.dmcdn.net/static/video/152/008/44800251:jpeg_preview_small.jpg?20120508103336",@"http://static2.dmcdn.net/static/video/694/741/35147496:jpeg_preview_small.jpg?20120508111445",@"http://static2.dmcdn.net/static/video/988/667/44766889:jpeg_preview_small.jpg?20120508130425",@"http://static2.dmcdn.net/static/video/282/467/44764282:jpeg_preview_small.jpg?20120507130637",@"http://static2.dmcdn.net/static/video/754/657/44756457:jpeg_preview_small.jpg?20120507093012",@"http://static2.dmcdn.net/static/video/831/107/44701138:jpeg_preview_small.jpg?20120506133917",@"http://static2.dmcdn.net/static/video/411/057/44750114:jpeg_preview_small.jpg?20120507014914",@"http://static2.dmcdn.net/static/video/894/547/44745498:jpeg_preview_small.jpg?20120509183004",@"http://static2.dmcdn.net/static/video/082/947/44749280:jpeg_preview_small.jpg?20120507015022",@"http://static2.dmcdn.net/static/video/833/347/44743338:jpeg_preview_small.jpg?20120509183004", nil];self.imageArray = array;UITableView *tableView = [[[UITableView alloc]initWithFrame:CGRectMake(0, 0, 320, 460) style:UITableViewStylePlain]autorelease];tableView.dataSource = self;tableView.delegate = self;self.tableViewImage = tableView;[self.view addSubview:tableViewImage];
    if (_refreshHeaderView == nil) {EGORefreshTableHeaderView *view =[[EGORefreshTableHeaderView alloc]initWithFrame:CGRectMake(0.0f, 0.0f - self.tableViewImage.bounds.size.height, self.view.bounds.size.width, self.tableViewImage.bounds.size.height)];
//注意下拉框的位置描述!要把tableViewImage换成自己定义的tableview!view.delegate = self;[self.tableViewImage addSubview:view];//这里要把view加到自己定义的tableview上_refreshHeaderView = view;[view release];}[_refreshHeaderView refreshLastUpdatedDate];
}#pragma mark -tableview-- (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];}cell.textLabel.text = [NSString stringWithFormat:@"喵星人--%d",indexPath.row];[cell.imageView setImageWithURL:[NSURL URLWithString:[self.imageArray objectAtIndex:indexPath.row]] placeholderImage:[UIImage imageNamed:@"LittleWhitePig.png"]];
//这句话是SDWebImage类里面的方法,作用是异步加载图片
//- (void)setImageWithURL:(NSURL *)url placeholderImage:(UIImage *)placeholder
//其中placeholder是网络图片在加载完之前替代它占位的图片。return cell;
}- (NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section
{return [imageArray count];
}- (CGFloat)tableView:(UITableView *)tableView heightForRowAtIndexPath:(NSIndexPath *)indexPath{return 80;
}#pragma mark -refresh-
- (void)reloadTableViewDataSource
{
   NSLog(@"==开始加载数据");  [self.tableViewImage reloadData];//这里tableview要reloadData_reloading = YES;
}- (void)doneLoadingTableViewData
{NSLog(@"===加载完数据");_reloading = NO;[_refreshHeaderView egoRefreshScrollViewDataSourceDidFinishedLoading:self.tableViewImage];//这里要改成自己定义的tableview
}#pragma mark -
#pragma mark EGORefreshTableHeaderDelegate Methods
- (void)egoRefreshTableHeaderDidTriggerRefresh:(EGORefreshTableHeaderView*)view{[self reloadTableViewDataSource];[self performSelector:@selector(doneLoadingTableViewData) withObject:nil afterDelay:3.0];}- (BOOL)egoRefreshTableHeaderDataSourceIsLoading:(EGORefreshTableHeaderView*)view{return _reloading; // should return if data source model is reloading}- (NSDate*)egoRefreshTableHeaderDataSourceLastUpdated:(EGORefreshTableHeaderView*)view{return [NSDate date]; // should return date data source was last changed}#pragma mark -
#pragma mark UIScrollViewDelegate Methods- (void)scrollViewDidScroll:(UIScrollView *)scrollView{    [_refreshHeaderView egoRefreshScrollViewDidScroll:scrollView];}- (void)scrollViewDidEndDragging:(UIScrollView *)scrollView willDecelerate:(BOOL)decelerate{[_refreshHeaderView egoRefreshScrollViewDidEndDragging:scrollView];}- (void)viewDidUnload
{[super viewDidUnload];
}- (void)viewWillAppear:(BOOL)animated
{[super viewWillAppear:animated];
}- (void)viewDidAppear:(BOOL)animated
{[super viewDidAppear:animated];
}- (void)viewWillDisappear:(BOOL)animated
{[super viewWillDisappear:animated];
}- (void)viewDidDisappear:(BOOL)animated
{[super viewDidDisappear:animated];
}- (BOOL)shouldAutorotateToInterfaceOrientation:(UIInterfaceOrientation)interfaceOrientation
{
   return (interfaceOrientation != UIInterfaceOrientationPortraitUpsideDown);
}- (void)dealloc {[self.imageArray release];[self.tableViewImage release]; _refreshHeaderView = nil;[super dealloc];
}@end

  重点在文中已经注释出来了,应该很明了,如果有任何问题请给我留言。

完全代码实现UITableView下拉更新,异步请求数据相关推荐

  1. [EGORefreshTableHeaderView]手动启动下拉更新的方法

    原文地址:http://blog.csdn.net/ugg/article/details/7283661 Q:在EGORefreshTable中手动启动下拉更新的方法? A:EGORefreshTa ...

  2. 微信小程序教学第三章第四节(含视频):小程序中级实战教程:下拉更新、分享、阅读标识...

    为什么80%的码农都做不了架构师?>>>    下拉更新.分享.阅读标识 本文配套视频地址: https://v.qq.com/x/page/h0554i4u5ob.html 开始前 ...

  3. android ScrollView实现上拉、下拉更新

    项目中需要实现对listView的上拉加载更多的功能,忙了一上午也没搞定,从网上看到一篇文章实现了listView的下拉功能,在参照着改的过程中,实现了另一种形式的上拉.下拉更新,参照文章http:/ ...

  4. 仿新浪微博的ListView下拉更新功能

    由于最近做的项目中也用到了这个功能,今天刚好实现了下,就趁现在有时间写篇博客分享下.在做的时候也参考了下别人的代码,毕竟站在巨人的肩膀上才会是自己更加强大.哈哈!先看看新浪的下拉更新是什么样的吧! O ...

  5. Android模仿QQ的左右滑动切换界面和下拉更新的效果

    转自http://www.linuxidc.com/Linux/2012-08/67207.htm 主布局main.xml <?xml version="1.0" encod ...

  6. 模仿QQ的左右滑动切换界面和下拉更新的效果

    1.首先看看布局 主布局main.xml <?xml version="1.0" encoding="utf-8"?> <LinearLayo ...

  7. html 下拉多选框代码,js实现下拉复选框效果(代码实例)

    本章给大家带来用js实现下拉复选框效果(代码实例),有一定的参考价值,有需要的朋友可以参考一下,希望对你有所帮助. 先看看效果: 下面我们看看代码: HTML代码: HTML CSS JavaScri ...

  8. Android 天气APP(十)继续优化、下拉刷新页面天气数据

    上一篇:Android 天气APP(九)细节优化.必应每日一图 修复每日一图,增加下拉刷新,滑动改变标题 新版------------------- 一.修复每日请求必应壁纸Bug 二.增加下拉刷新 ...

  9. Android Compose 新闻App(四)下拉刷新、复杂数据、网格布局、文字样式

    Compose 新闻App(四)下拉刷新.复杂数据.网格布局.文字样式 前言 正文 一.下拉刷新 ① 添加依赖 ② 使用 ③ 样式更改 二.刷新数据 三.复杂数据 四.复杂列表 ① 更改返回数据 ② ...

最新文章

  1. C++函数指针解引用
  2. input输入系统中是如何实现按键重复
  3. SpringCloud 应用在 Kubernetes 上的最佳实践 — 线上发布(可回滚)
  4. 【转】ABAP内表数据和JSON格式互转
  5. 深入解析String中的intern
  6. Pyalgotrade量化交易回测框架
  7. proxychains 一个好用的终端用代理拦截器
  8. leetcode题库53-- 最大子序和
  9. checked exception和runtime exception and error
  10. C++函数模板特化,类模板特化
  11. kali Linux桌面环境切换
  12. ATX电源的基本描述
  13. VBA-使用inputbox方法
  14. 手把手教你成为Shader编程达人系列概述
  15. Python提取PPT中的图片
  16. 服务器负载过高的处理方式
  17. 【刷机】nubia z17 root 刷入twrp
  18. LX弹幕wss弹幕RPC
  19. java流控_t-io小教程:tio-http内置的流控功能
  20. QCad源码分析 第一章

热门文章

  1. 奋斗吧,程序员——第二十八章 叹年来踪迹,何事苦淹留
  2. 超声波发生器主板线路板设计
  3. 对我影响最大的三位老师
  4. 最新劳动强度排行榜 公务员排名绝对第一
  5. 《水经注地图服务》地图服务与通用设置说明
  6. ROS中的坐标与坐标系转换
  7. 【数据库】Apache Doris : 一个开源 MPP 数据库的架构与实践
  8. MPP数据库分区表详解
  9. Flying Saucer实现html转pdf(一些问题,持续更新)
  10. win10锁定计算机后黑屏,解决Win10计算机黑屏问题,只有鼠标指针不能进入桌面...