接上二篇的内容,今天我们就来介绍一下如何将解析出来的数据放入AQGridView中显示出来,因为我们的工程中已经将AQGridView导入了,所以我们在KKFirstViewController中直接可以引用

[plain] view plaincopy
  1. #import <UIKit/UIKit.h>
  2. #import "ASIHTTPRequest.h"
  3. #import "AQGridView.h"
  4. @interface KKFirstViewController : UIViewController<ASIHTTPRequestDelegate, AQGridViewDelegate, AQGridViewDataSource>
  5. @property(nonatomic, retain)AQGridView *gridView;
  6. @end

这里加入了AQGridViewDelegate和AQGridViewDataSource这两个委托,简单一点我们可以把AQGridView看成UITableView,同样的道理,一个是数据源的方法,一个就是选中的方法

然后就是
在-(void)viewDidLoad这个方法中,我们加入了

[plain] view plaincopy
  1. self.gridView = [[AQGridView alloc] initWithFrame:CGRectMake(0, 0, 320, 460)];
  2. self.gridView.autoresizingMask = UIViewAutoresizingFlexibleWidth | UIViewAutoresizingFlexibleHeight;
  3. self.gridView.autoresizesSubviews = YES;
  4. self.gridView.delegate = self;
  5. self.gridView.dataSource = self;
  6. [self.view addSubview:gridView];

将当前的gridView加入主视图中

接着还有两个方法一定需要实现的

[plain] view plaincopy
  1. #pragma mark AQGridViewDataSource
  2. //总共有的Item
  3. -(NSUInteger)numberOfItemsInGridView:(AQGridView *)gridView{
  4. return [arrays count];
  5. }
  6. //每个Item
  7. -(AQGridViewCell *)gridView:(AQGridView *)aGridView cellForItemAtIndex:(NSUInteger)index{
  8. static NSString *identifier = @"PlainCell";
  9. GridViewCell *cell = (GridViewCell *)[aGridView dequeueReusableCellWithIdentifier:identifier];
  10. if(cell == nil){
  11. cell = [[GridViewCell alloc] initWithFrame:CGRectMake(0, 0, 160, 123) reuseIdentifier:identifier];
  12. }
  13. //取得每一个字典
  14. NSDictionary *dict = [arrays objectAtIndex:index];
  15. [cell.captionLabel setText:[dict objectForKey:kName_Title]];
  16. return cell;
  17. }
  18. //每个显示框大小
  19. -(CGSize)portraitGridCellSizeForGridView:(AQGridView *)gridView{
  20. return CGSizeMake(160, 123);
  21. }

这里还少一个类,就是GridView,这个类继承了AQGridViewCell,里面就是我们单独要显示的一个Item

[plain] view plaincopy
  1. #import "AQGridViewCell.h"
  2. @interface GridViewCell : AQGridViewCell
  3. @property(nonatomic, retain)UIImageView *imageView;
  4. @property(nonatomic, retain)UILabel *captionLabel;
  5. @end

图片显示的是团购信息中的图片,还有一个是文本

[plain] view plaincopy
  1. #import "GridViewCell.h"
  2. @implementation GridViewCell
  3. @synthesize imageView,captionLabel;
  4. - (id)initWithFrame:(CGRect)frame reuseIdentifier:(NSString *)reuseIdentifier
  5. {
  6. self = [super initWithFrame:frame reuseIdentifier:reuseIdentifier];
  7. if (self) {
  8. UIView *mainView = [[UIView alloc] initWithFrame:CGRectMake(0, 0, 160, 123)];
  9. [mainView setBackgroundColor:[UIColor clearColor]];
  10. UIImageView *frameImageView = [[UIImageView alloc] initWithFrame:CGRectMake(9, 4, 142, 117)];
  11. [frameImageView setImage:[UIImage imageNamed:@"tab-mask.png"]];
  12. self.imageView = [[UIImageView alloc] initWithFrame:CGRectMake(13, 8, 135, 84)];
  13. self.captionLabel = [[UILabel alloc] initWithFrame:CGRectMake(13, 92, 127, 21)];
  14. [captionLabel setFont:[UIFont systemFontOfSize:14]];
  15. [mainView addSubview:imageView];
  16. [mainView addSubview:frameImageView];
  17. [mainView addSubview:captionLabel];
  18. [self.contentView addSubview:mainView];
  19. }
  20. return self;
  21. }
  22. @end

这里面定义了三个控件,两个控件是我们要传入的数据,一个图片,一个文本,还有一个就是我们单独Item的背景

做完这一些,运行一下,我们就可以看到有文字信息的效果了,但还没有加入图片显示功能,从这里我们就要考虑了,图片是我们划动的时候再加载呢还是一次性加载呢,考虑到效果和数据流量,我们还是用异步来加载数据,这就需要加入缓存的功能了,我们用一个NSMutableArray来实现缓存。

看一下代码呢,这代码也是参考了别人写的

[plain] view plaincopy
  1. //缓存图片
  2. -(UIImage *)cachedImageForUrl:(NSURL *)url{
  3. id cacheObject = [self.cachedImage objectForKey:url];
  4. if (cacheObject == nil) {
  5. //添加占位符
  6. [self.cachedImage setObject:@"Loading..." forKey:url];
  7. ASIHTTPRequest *picRequest = [ASIHTTPRequest requestWithURL:url];
  8. picRequest.delegate = self;
  9. picRequest.didFinishSelector = @selector(didFinishRequestImage:);
  10. picRequest.didFailSelector = @selector(didFailRequestImage:);
  11. //加入队列
  12. [self.queue addOperation:picRequest];
  13. [UIApplication sharedApplication].networkActivityIndicatorVisible = YES;
  14. }else if(![cacheObject isKindOfClass:[UIImage class]]){
  15. cacheObject = nil;
  16. }
  17. return cacheObject;
  18. }
  19. //完成图片下载,并加入缓存
  20. -(void)didFinishRequestImage:(ASIHTTPRequest *)request{
  21. NSData *imageData = [request responseData];
  22. UIImage *image = [UIImage imageWithData:imageData];
  23. if (image != nil) {
  24. [self.cachedImage setObject:image forKey:request.url];
  25. [self.gridView reloadData];
  26. }
  27. [UIApplication sharedApplication].networkActivityIndicatorVisible = NO;
  28. }
  29. //下载失败
  30. -(void)didFailRequestImage:(ASIHTTPRequest *)request{
  31. NSLog(@"Error download Image %@", [request error]);
  32. //从当前缓存中移除
  33. [self.cachedImage removeObjectForKey:request.url];
  34. [UIApplication sharedApplication].networkActivityIndicatorVisible = NO;
  35. }

最后我们在Cell中加入显示图片的代码就可以了,就实现了异步加载图片

[plain] view plaincopy
  1. //利用缓存保存图片

转载于:https://www.cnblogs.com/yulang314/p/3549640.html

ios 团购信息客户端demo(三)相关推荐

  1. ios 团购信息客户端demo(一)

    团购信息客户端,主要整合了ASIHTTPREQUEST,KISSXML,AQGridView,MBProgressHUD这几个主要流行的IOS开发库,我们先来看一下效果图 首先我们新建一个IOS工程, ...

  2. 糯米团—重制“iPhone团购信息客户端”(三)

    一个cell和一个popover写好之后,就可以进入主视图的编辑了. FirstViewController.h #import <UIKit/UIKit.h> #import " ...

  3. 糯米团—重制“iPhone团购信息客户端”(零)源代码与跳的那些坑和思考

    前言 早就盼望着这一天发布博客记录我写程序的路程!是的,是第一个写在csdn上的app制作笔记!终于完成这个程序!!虽然有bug且功能单一,作为一个练手的app做出还是很有成就感,故拿出来和同样的新手 ...

  4. 糯米团—重制“iPhone团购信息客户端”(一)

    前言 因为是重制的客户端,作者博客中写到的很详细的内容相同的这里不会再写,但会给出提示,对照查看. iPhone团购信息客户端的开发 目录结构 由于原作没有按照分层架构设计,所以这里我按照自己想法进行 ...

  5. [iPhone中级] iPhone团购信息客户端的开发 (一)

    因为工作的原因,已经很久没有更新博客了,这次我们就来完成一个稍显复杂的一个团购信息客户端,主要整合了ASIHTTPREQUEST,KISSXML,AQGridView,MBProgressHUD这几个 ...

  6. [iPhone中级] iPhone团购信息客户端的开发 (三)

    接上二篇的内容,今天我们就来介绍一下如何将解析出来的数据放入AQGridView中显示出来,因为我们的工程中已经将AQGridView导入了,所以我们在KKFirstViewController中直接 ...

  7. [iPhone中级]iPhone团购信息客户端的开发 (二)

    接上一篇,这篇我们对我们的客户端加入KissXML,MBProgressHUD,AQridView这几个库,首先我们先加入KissXML,这是XML解析库,支持Xpath,可以方便添加更改任何节点.先 ...

  8. [iPhone中级] iPhone团购信息客户端的开发 (四)

    我们对团购客户端进行了重构,来看一下效果图呢 这里因为美团提供了地图坐标,所以我们也加入了MapKit来显示店铺所在位置,但只有美团有,其他几个网站都没有提供. 我们把源码放出:谢谢大家一如既往的支持 ...

  9. 糯米团—重制“iPhone团购信息客户端”(四)

    奥对,忘了说了,Xcode7已经默认https连接了,自动锁定了http连接 Solution: 1. 在Info.plist中添加 NSAppTransportSecurity 类型 Diction ...

最新文章

  1. php 的包管理工具 composer
  2. 怎么书写高质量jQuery代码
  3. 虚拟化:IT技术的第三次革命
  4. Python数据相关系数矩阵和热力图轻松实现
  5. VS code 使用 Remote-SSH 进行python远程开发
  6. Debian的软件包管理工具命令不完全列表
  7. 数据结构折半查找例题_数据结构第9章例题与答案
  8. 【java】Java 8 - 移除Permgen 使用元空间
  9. 解决sql2008附加不了2005的数据库文件的问题
  10. 《nftables相比iptables到底改变了什么》-- (作者:blog.csdn.net/dog250)
  11. python从语音生成语谱图
  12. 基于STM32F103ZET6 HC_SR501人体红外感应
  13. 电源大师课笔记 2.4
  14. 高等代数_第2章:证明_Laplace定理
  15. matlab或_Matlab下载安装教程
  16. 计算机内存储器和外存储器相比较,计算机中内存储器和外存储器有什么区别
  17. USB总线虚拟示波器,用高性能硬件模块,组合成多种仪器
  18. 超全Android中高级面试复习大纲,挥泪整理面经
  19. SqlServer数据库 时间类型字段添加默认值 设置时间格式
  20. HashMap 计算key的hash值方法hash()

热门文章

  1. mysql slave 详细配置_进击的MysqlSlave环境搭建及配置
  2. Matplotlib中中文不显示问题
  3. UVA 1515 - Pool construction(最小割)
  4. LeetCode 75. 颜色分类(Sort Colors)
  5. Linux从入门到精通——自动安装脚本
  6. Loadrunner压测时,出现的问题汇总
  7. 回调函数在replace方法中的应用
  8. iPhone开发之 ARC是什么
  9. 题目:[NOIP2008]笨小猴
  10. dotnet core Linux下图片验证码解决方案