完全代码实现UITableView下拉更新,异步请求数据
原文: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下拉更新,异步请求数据相关推荐
- [EGORefreshTableHeaderView]手动启动下拉更新的方法
原文地址:http://blog.csdn.net/ugg/article/details/7283661 Q:在EGORefreshTable中手动启动下拉更新的方法? A:EGORefreshTa ...
- 微信小程序教学第三章第四节(含视频):小程序中级实战教程:下拉更新、分享、阅读标识...
为什么80%的码农都做不了架构师?>>> 下拉更新.分享.阅读标识 本文配套视频地址: https://v.qq.com/x/page/h0554i4u5ob.html 开始前 ...
- android ScrollView实现上拉、下拉更新
项目中需要实现对listView的上拉加载更多的功能,忙了一上午也没搞定,从网上看到一篇文章实现了listView的下拉功能,在参照着改的过程中,实现了另一种形式的上拉.下拉更新,参照文章http:/ ...
- 仿新浪微博的ListView下拉更新功能
由于最近做的项目中也用到了这个功能,今天刚好实现了下,就趁现在有时间写篇博客分享下.在做的时候也参考了下别人的代码,毕竟站在巨人的肩膀上才会是自己更加强大.哈哈!先看看新浪的下拉更新是什么样的吧! O ...
- Android模仿QQ的左右滑动切换界面和下拉更新的效果
转自http://www.linuxidc.com/Linux/2012-08/67207.htm 主布局main.xml <?xml version="1.0" encod ...
- 模仿QQ的左右滑动切换界面和下拉更新的效果
1.首先看看布局 主布局main.xml <?xml version="1.0" encoding="utf-8"?> <LinearLayo ...
- html 下拉多选框代码,js实现下拉复选框效果(代码实例)
本章给大家带来用js实现下拉复选框效果(代码实例),有一定的参考价值,有需要的朋友可以参考一下,希望对你有所帮助. 先看看效果: 下面我们看看代码: HTML代码: HTML CSS JavaScri ...
- Android 天气APP(十)继续优化、下拉刷新页面天气数据
上一篇:Android 天气APP(九)细节优化.必应每日一图 修复每日一图,增加下拉刷新,滑动改变标题 新版------------------- 一.修复每日请求必应壁纸Bug 二.增加下拉刷新 ...
- Android Compose 新闻App(四)下拉刷新、复杂数据、网格布局、文字样式
Compose 新闻App(四)下拉刷新.复杂数据.网格布局.文字样式 前言 正文 一.下拉刷新 ① 添加依赖 ② 使用 ③ 样式更改 二.刷新数据 三.复杂数据 四.复杂列表 ① 更改返回数据 ② ...
最新文章
- C++函数指针解引用
- input输入系统中是如何实现按键重复
- SpringCloud 应用在 Kubernetes 上的最佳实践 — 线上发布(可回滚)
- 【转】ABAP内表数据和JSON格式互转
- 深入解析String中的intern
- Pyalgotrade量化交易回测框架
- proxychains 一个好用的终端用代理拦截器
- leetcode题库53-- 最大子序和
- checked exception和runtime exception and error
- C++函数模板特化,类模板特化
- kali Linux桌面环境切换
- ATX电源的基本描述
- VBA-使用inputbox方法
- 手把手教你成为Shader编程达人系列概述
- Python提取PPT中的图片
- 服务器负载过高的处理方式
- 【刷机】nubia z17 root 刷入twrp
- LX弹幕wss弹幕RPC
- java流控_t-io小教程:tio-http内置的流控功能
- QCad源码分析 第一章