TEXT:

AppDelegate.m

    self.window.rootViewController = [[[UINavigationController alloc]initWithRootViewController:[RootViewController new]]autorelease];

RootViewController.m

#import "RootViewController.h"
#import "ImageCell.h"
#import "ImageURL.h"
#define kImageCell @"imagecell"
@interface RootViewController ()<UICollectionViewDataSource>
@property(nonatomic,retain)NSMutableArray *dataSource;//存储model对象
@end
//释放
- (void)dealloc
{
    self.dataSource = nil;
    [super dealloc];
}
//懒加载
- (NSMutableArray *)dataSource{

    if (_dataSource == nil) {
        self.dataSource = [NSMutableArray arrayWithCapacity:0];
    }
    return [[_dataSource retain]autorelease];
}
- (void)viewDidLoad {
    [super viewDidLoad];
    self.view.backgroundColor = [UIColor whiteColor];
    //调用配置CollectionView
    [self confgureCollectionView];
    //调用解析
    [self readDataFromFile];

}

解析数据:

- (void)readDataFromFile{
    //获取文件的路径
    NSString *filePath = [[NSBundle mainBundle]pathForResource:@"Data.json" ofType:nil];
    //使用文件的初始化NSData对象
    NSData *data = [NSData dataWithContentsOfFile:filePath];
    //使用json解析
 NSMutableArray *sourceArray =  [NSJSONSerialization JSONObjectWithData:data options:NSJSONReadingMutableContainers  error:nil];
//    NSLog(@"%@",sourceArray);
    //遍历字典
    for (NSDictionary *dic in sourceArray) {
        //创建model对象
        ImageURL *URL = [[ImageURL alloc]init];
        //添加到model
        [URL setValuesForKeysWithDictionary:dic];
        //添加到数组
        [self.dataSource addObject:URL];
        NSLog(@"%@",self.dataSource);

    }
}

配置CollectionView

//配置CollectionView
- (void)confgureCollectionView{
    //创建布局工具
    UICollectionViewFlowLayout *flowLayout = [[UICollectionViewFlowLayout alloc]init];
    //设置item的大小
    flowLayout.itemSize = CGSizeMake(140, 160);
    //设置分区缩进量
    flowLayout.sectionInset = UIEdgeInsetsMake(5, 10, 5, 10);

    //创建CollectionView对象
    UICollectionView *collectionView = [[UICollectionView alloc]initWithFrame:[UIScreen mainScreen].bounds collectionViewLayout:flowLayout];
    //配置数据源代理
    collectionView.dataSource = self;
    //注册cell
    [collectionView registerClass:[ImageCell class] forCellWithReuseIdentifier:kImageCell];
    //设置背景颜色
    collectionView.backgroundColor = [UIColor whiteColor];  

    //添加到父视图上
    [self.view addSubview:collectionView];
    [collectionView release];
    [flowLayout release];

}

#pragma mark 数据源代理方法

//返回分区个数
- (NSInteger)collectionView:(UICollectionView *)collectionView numberOfItemsInSection:(NSInteger)section{

    return self.dataSource.count;

}
- (UICollectionViewCell *)collectionView:(UICollectionView *)collectionView cellForItemAtIndexPath:(NSIndexPath *)indexPath{
    ImageCell *cell = [collectionView dequeueReusableCellWithReuseIdentifier:kImageCell forIndexPath:indexPath];
    //根据item的下标取出对应位置的数据
    ImageURL *url = self.dataSource[indexPath.item];
    //调用cell控件赋值的方法
    [cell assignValueByImageURL:url];

    return cell;
}

自定义cell:

<span style="font-size:24px;">//ImageCell.h
#import <UIKit/UIKit.h>
@class ImageURL;
@interface ImageCell : UICollectionViewCell
//写一个方法给cell上控件赋值
- (void)assignValueByImageURL : (ImageURL *)image;
@end

//ImageCell.m
#import "ImageCell.h"
#import "UIImageView+WebCache.h"
#import "ImageURL.h"
@interface ImageCell ()
@property(nonatomic,retain)UIImageView *photoView;
@end

@implementation ImageCell
- (void)dealloc
{
    self.photoView = nil;
    [super dealloc];
}
- (id)initWithFrame:(CGRect)frame{
    if (self = [super initWithFrame:frame]) {

        [self.contentView addSubview:self.photoView];

    }
    return self;
}

- (UIImageView *)photoView{

    if (_photoView == nil) {
        self.photoView = [[UIImageView alloc]initWithFrame:self.bounds];
        self.photoView.backgroundColor = [UIColor cyanColor];

    }
    return [[_photoView retain]autorelease];

}
//写一个方法给cell上控件赋值
- (void)assignValueByImageURL : (ImageURL *)image{
    //1.使用图片异步加载
    [self.photoView sd_setImageWithURL:[NSURL URLWithString:image.thumbURL] placeholderImage:[UIImage imageNamed:@"占位1"]];
}
@end</span>

建一个model数据类:

<span style="font-size:24px;">//ImageURL.h
@interface ImageURL : NSObject
@property(nonatomic,copy)NSString *thumbURL;
@end

//ImageURL.m
#import "ImageURL.h"

@implementation ImageURL
- (void)dealloc
{
    self.thumbURL= nil;
    [super dealloc];
}

//防止Crash
- (void)setValue:(id)value forUndefinedKey:(NSString *)key{
}
@end</span>

效果展示:

图片占位:

------------------------------------------------------------------

Data文件下载:http://pan.baidu.com/s/1ntw5W3f

本节知识点:http://blog.csdn.net/qq_31810357/article/details/49154985

UICollectionView请求网络数据显示(Text)的更多相关文章

  1. react-native 项目实战 -- 新闻客户端(4) -- 请求网络数据

    1.Home.js /** * 首页 */ import React, { Component } from 'react'; import { AppRegistry, StyleSheet, Te ...

  2. Android请求网络共通类——Hi_博客 Android App 开发笔记

    今天 ,来分享一下 ,一个博客App的开发过程,以前也没开发过这种类型App 的经验,求大神们轻点喷. 首先我们要创建一个Andriod 项目 因为要从网络请求数据所以我们先来一个请求网络的共通类. ...

  3. Android 手机卫士--构建服务端json、请求网络数据

    本文地址:http://www.cnblogs.com/wuyudong/p/5900384.html,转载请注明源地址. 数据的传递 客户端:发送http请求 http://www.oxx.com/ ...

  4. 安卓中自定义并使用Volley框架请求网络

    大家好,今天我们讲一下如何使用Volley框架请求网络,为何要使用Volley框架,这就要先说一下使用Volley框架请求网络的优点了,volley是易于定制的,即你可以根据需求来设定volley框架 ...

  5. 使用innerHTML生成的script节点不会发出请求与执行text属性

    <!DOCTYPE html> <html> <head> <meta charset="utf-8"> <title> ...

  6. 在Service服务中请求网络

    一.startservice方式启动 第一次startservice启动服务的时候,会走oncreate和onstart方法, 第二次startservice启动服务的时候,会走onstart方法, ...

  7. Android - 使用Volley请求网络数据

    Android - 使用Volley请求网络数据 Android L : Android Studio 14 个人使用volley的小记,简述使用方法,不涉及volley源码 准备工作 导入Volle ...

  8. 解决React Native使用Fetch API请求网络报Network request failed

    问题来源: 1 . 在测试fetch数据请求时,Xcode9.0以上的无法请求https, 需要在Xcode中加载项目后修改Info.plist的相关配置,具体如下参考 问题及解决方法一模一样,不再重 ...

  9. 安卓请求网络错误 直接在main Thread 进行网络操作出现maintreamexception

    StrictMode.setThreadPolicy(new StrictMode.ThreadPolicy.Builder() .detectDiskReads().detectDiskWrites ...

随机推荐

  1. Ubuntu14.04和Windows双系统时无法挂载磁盘解决方法

    基本状况:我电脑Ubuntu14.04 和 Windows10 双系统,一个固态磁盘,一个机械磁盘.Ubuntu14.04装固态里面了,固态里没有Windows内容. 问题:Ubuntu14.04系统 ...

  2. ubuntu 命令行下格式化U盘,磁盘分区

    命令行格式化磁盘一般是:先卸载,后格式化. 先说格式化U盘的方法,格式化磁盘某个分区是同样的道理. 一般情况下U盘会挂载在/meida/<username>/<disk>目录下 ...

  3. Python笔记十一(迭代器)

    这里我们要学会Iterable和Iterator. 一类是集合数据类型,如list.tuple.dict.set.str等: 一类是generator,包括生成器和带yield的generator f ...

  4. C++ substr

    函数文档:http://www.cplusplus.com/reference/string/string/substr/ /* substr(size_t pos = 0,size_t len = ...

  5. Python安装与使用的常见问题

    1. Python安装问题 到Python官网下载Python最新版本 Windows x86-64 executable installer (64为操作系统选择这个) Windows x86 ex ...

  6. APP自动化框架LazyAndroid使用手册(2)--元素自动抓取

    作者:黄书力 概述 前面的一篇博文简要介绍了安卓自动化测试框架LazyAndroid的组成结构和基本功能,本文将详细描述此框架中元素自动抓取工具lazy-uiautomaterviewer的使用方法. ...

  7. 在Spring Boot框架下使用WebSocket实现聊天功能

    上一篇博客我们介绍了在Spring Boot框架下使用WebSocket实现消息推送,消息推送是一对多,服务器发消息发送给所有的浏览器,这次我们来看看如何使用WebSocket实现消息的一对一发送,模 ...

  8. Dubbo框架应用之(一)--服务体系

    Dubbo 是阿里巴巴公司开源的一个高性能优秀的服务框架,使得应用可通过高性能的 RPC 实现服务的输出和输入功能,可以和 Spring框架无缝集成,也是一个非常全面的SOA基础框架.其是阿里巴巴SO ...

  9. ubuntu日志文件管理

    众所周知,ubuntu的日志文件会越来越大,需要定期管理 logrotate是个十分有用的工具,它可以自动对日志进行截断(或轮循).压缩以及删除旧的日志文件.例如,你可以设置logrotate,让/v ...

  10. app控件唯一相对Xpath自动生成(增强版uiautomatorviewer)

    作者:cryanimal QQ:164166060 工具由来 前面的一篇博文较详细地介绍了uiautomatorviewer:扫描和分析Android应用程序的UI控件的工具. 熟悉控件获取的同学都知 ...