ios 团购信息客户端demo(三)
接上二篇的内容,今天我们就来介绍一下如何将解析出来的数据放入AQGridView中显示出来,因为我们的工程中已经将AQGridView导入了,所以我们在KKFirstViewController中直接可以引用
- #import <UIKit/UIKit.h>
- #import "ASIHTTPRequest.h"
- #import "AQGridView.h"
- @interface KKFirstViewController : UIViewController<ASIHTTPRequestDelegate, AQGridViewDelegate, AQGridViewDataSource>
- @property(nonatomic, retain)AQGridView *gridView;
- @end
这里加入了AQGridViewDelegate和AQGridViewDataSource这两个委托,简单一点我们可以把AQGridView看成UITableView,同样的道理,一个是数据源的方法,一个就是选中的方法
然后就是
在-(void)viewDidLoad这个方法中,我们加入了
- self.gridView = [[AQGridView alloc] initWithFrame:CGRectMake(0, 0, 320, 460)];
- self.gridView.autoresizingMask = UIViewAutoresizingFlexibleWidth | UIViewAutoresizingFlexibleHeight;
- self.gridView.autoresizesSubviews = YES;
- self.gridView.delegate = self;
- self.gridView.dataSource = self;
- [self.view addSubview:gridView];
将当前的gridView加入主视图中
接着还有两个方法一定需要实现的
- #pragma mark AQGridViewDataSource
- //总共有的Item
- -(NSUInteger)numberOfItemsInGridView:(AQGridView *)gridView{
- return [arrays count];
- }
- //每个Item
- -(AQGridViewCell *)gridView:(AQGridView *)aGridView cellForItemAtIndex:(NSUInteger)index{
- static NSString *identifier = @"PlainCell";
- GridViewCell *cell = (GridViewCell *)[aGridView dequeueReusableCellWithIdentifier:identifier];
- if(cell == nil){
- cell = [[GridViewCell alloc] initWithFrame:CGRectMake(0, 0, 160, 123) reuseIdentifier:identifier];
- }
- //取得每一个字典
- NSDictionary *dict = [arrays objectAtIndex:index];
- [cell.captionLabel setText:[dict objectForKey:kName_Title]];
- return cell;
- }
- //每个显示框大小
- -(CGSize)portraitGridCellSizeForGridView:(AQGridView *)gridView{
- return CGSizeMake(160, 123);
- }
这里还少一个类,就是GridView,这个类继承了AQGridViewCell,里面就是我们单独要显示的一个Item
- #import "AQGridViewCell.h"
- @interface GridViewCell : AQGridViewCell
- @property(nonatomic, retain)UIImageView *imageView;
- @property(nonatomic, retain)UILabel *captionLabel;
- @end
图片显示的是团购信息中的图片,还有一个是文本
- #import "GridViewCell.h"
- @implementation GridViewCell
- @synthesize imageView,captionLabel;
- - (id)initWithFrame:(CGRect)frame reuseIdentifier:(NSString *)reuseIdentifier
- {
- self = [super initWithFrame:frame reuseIdentifier:reuseIdentifier];
- if (self) {
- UIView *mainView = [[UIView alloc] initWithFrame:CGRectMake(0, 0, 160, 123)];
- [mainView setBackgroundColor:[UIColor clearColor]];
- UIImageView *frameImageView = [[UIImageView alloc] initWithFrame:CGRectMake(9, 4, 142, 117)];
- [frameImageView setImage:[UIImage imageNamed:@"tab-mask.png"]];
- self.imageView = [[UIImageView alloc] initWithFrame:CGRectMake(13, 8, 135, 84)];
- self.captionLabel = [[UILabel alloc] initWithFrame:CGRectMake(13, 92, 127, 21)];
- [captionLabel setFont:[UIFont systemFontOfSize:14]];
- [mainView addSubview:imageView];
- [mainView addSubview:frameImageView];
- [mainView addSubview:captionLabel];
- [self.contentView addSubview:mainView];
- }
- return self;
- }
- @end
这里面定义了三个控件,两个控件是我们要传入的数据,一个图片,一个文本,还有一个就是我们单独Item的背景
做完这一些,运行一下,我们就可以看到有文字信息的效果了,但还没有加入图片显示功能,从这里我们就要考虑了,图片是我们划动的时候再加载呢还是一次性加载呢,考虑到效果和数据流量,我们还是用异步来加载数据,这就需要加入缓存的功能了,我们用一个NSMutableArray来实现缓存。
看一下代码呢,这代码也是参考了别人写的
- //缓存图片
- -(UIImage *)cachedImageForUrl:(NSURL *)url{
- id cacheObject = [self.cachedImage objectForKey:url];
- if (cacheObject == nil) {
- //添加占位符
- [self.cachedImage setObject:@"Loading..." forKey:url];
- ASIHTTPRequest *picRequest = [ASIHTTPRequest requestWithURL:url];
- picRequest.delegate = self;
- picRequest.didFinishSelector = @selector(didFinishRequestImage:);
- picRequest.didFailSelector = @selector(didFailRequestImage:);
- //加入队列
- [self.queue addOperation:picRequest];
- [UIApplication sharedApplication].networkActivityIndicatorVisible = YES;
- }else if(![cacheObject isKindOfClass:[UIImage class]]){
- cacheObject = nil;
- }
- return cacheObject;
- }
- //完成图片下载,并加入缓存
- -(void)didFinishRequestImage:(ASIHTTPRequest *)request{
- NSData *imageData = [request responseData];
- UIImage *image = [UIImage imageWithData:imageData];
- if (image != nil) {
- [self.cachedImage setObject:image forKey:request.url];
- [self.gridView reloadData];
- }
- [UIApplication sharedApplication].networkActivityIndicatorVisible = NO;
- }
- //下载失败
- -(void)didFailRequestImage:(ASIHTTPRequest *)request{
- NSLog(@"Error download Image %@", [request error]);
- //从当前缓存中移除
- [self.cachedImage removeObjectForKey:request.url];
- [UIApplication sharedApplication].networkActivityIndicatorVisible = NO;
- }
最后我们在Cell中加入显示图片的代码就可以了,就实现了异步加载图片
- //利用缓存保存图片
ios 团购信息客户端demo(三)的更多相关文章
- ios 团购信息客户端demo(一)
团购信息客户端,主要整合了ASIHTTPREQUEST,KISSXML,AQGridView,MBProgressHUD这几个主要流行的IOS开发库,我们先来看一下效果图 首先我们新建一个IOS工程, ...
- ios 团购信息客户端demo(二)
接上一篇,这篇我们对我们的客户端加入KissXML,MBProgressHUD,AQridView这几个库,首先我们先加入KissXML,这是XML解析库,支持Xpath,可以方便添加更改任何节点.先 ...
- iOS开发:一个高仿美团的团购ipad客户端的设计和实现(功能:根据拼音进行检索并展示数据,离线缓存团购数据,浏览记录与收藏记录的批量删除等)
大致花了一个月时间,利用各种空闲时间,将这个客户端实现了,在这里主要是想记录下,设计的大体思路以及实现过程中遇到的坑...... 这个项目的github地址:https://github.com/wz ...
- ecshop首页调用团购信息产品购买人数
当我们在ecshop后台录入ecshop的团购信息之后,我们在ecshop的前台首页index.php里面,可以看到他能调用ecshop的团购商品信息,其中就包括团购商品的一些价格信息.但是如何在ec ...
- ios 团购分类页面(9宫格)
=-= 命名有些错误,但功能实现,以后注意下命名规范 WJViewGroup.h #import <UIKit/UIKit.h> @interface WJViewGroup : UIVi ...
- iOS开发UI篇—使用xib自定义UItableviewcell实现一个简单的团购应用界面布局
iOS开发UI篇—使用xib自定义UItableviewcell实现一个简单的团购应用界面布局 一.项目文件结构和plist文件 二.实现效果 三.代码示例 1.没有使用配套的类,而是直接使用xib文 ...
- iOS开发——UI进阶篇(二)自定义等高cell,xib自定义等高的cell,Autolayout布局子控件,团购案例
一.纯代码自定义等高cell 首先创建一个继承UITableViewCell的类@interface XMGTgCell : UITableViewCell在该类中依次做一下操作1.添加子控件 - ( ...
- iOS UI基础-9.1 UITableView 团购
概述 接下来,我们要做的是团购界面的设计,最张要实现的效果图及项目结构图 团购数据的展示 思路: 系统自带的tableCell不能展示三个文本,不能满足条件,自定义tableCell 每一个 ...
- IOS第八天(2:UITableViewController团购,点击底部,xib加载更多, 代理模式)
******* HMViewController.h #import "HMViewController.h" #import "HMTg.h" #import ...
随机推荐
- 2014-5-16 NOIP模拟赛
Problem 1 抓牛(catchcow.cpp/c/pas) [题目描述] 农夫约翰被通知,他的一只奶牛逃逸了!所以他决定,马上出发,尽快把那只奶牛抓回来. 他们都站在数轴上.约翰在N(O≤N≤1 ...
- java数据结构----队列,优先级队列
1.队列:和栈中的情况不同,队列中的数据项不总是从数组下标0开始,移除一个数据项后,队头指针会指向下标较高的数据项,其特点:先入先出 2.图解 3.队列的实现代码: 3.1.Queue.java pa ...
- [題解](二分答案/單調隊列)luogu_P1419尋找段落
果然又抄的題解... 顯然答案具有單調性,而對于平均數計算的式子我們移一下項, 若s[l..r]>mid*(r-l+1)无解, 於是我們把每個數都減去一個mid,看和的正負即可,如果為正就可能有 ...
- CF #541div2 F
题目本质:并查集的链式合并 解决方法1: 类似哈夫曼树,叶节点们为真点,其余造一些虚的父节点,使得dfs这棵树的时候,先进行并查合并的点一定是兄弟节点因而紧挨着被输出,巧妙达到了效果. #pragma ...
- Curious Array Codeforces - 407C(高阶差分(?)) || sequence
https://codeforces.com/problemset/problem/407/C (自用,勿看) 手模一下找一找规律,可以发现,对于一个修改(l,r,k),相当于在[l,r]内各位分别加 ...
- 执行脚本 提示 command not found
问题现象: 初学shell,写了个脚本, 1.从windows 写好 脚本,然后部署到 linux 上. 2.chmod +x之后执行提示command not found,系统环境redhat9,用 ...
- 简单总结ConcurrentHashMap
一.HashTable hashTable是一个线程安全的容器,是线程安全版本的HashMap.但它的底层是和HashMap一样的,只是在方法上都加上了synchronized关键字. 这样子有什么后 ...
- 120 Triangle 三角形最小路径和
给出一个三角形(数据数组),找出从上往下的最小路径和.每一步只能移动到下一行中的相邻结点上.比如,给你如下三角形:[ [2], [3,4], [6,5,7], [4,1,8,3]] ...
- 使用express+mongoDB搭建多人博客 学习(5)权限控制
修改index.js如下: var express = require('express'); var router = express.Router(); var crypto=require('c ...
- JVM-GC日志分析
程序运行时配置如下参数: -Xms20M -Xmx20M -Xmn10M -verbose:gc -XX:+PrintGCDetails -XX:SurvivorRatio= -XX:+PrintGC ...