UICollectionView请求网络数据显示(Text)
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)的更多相关文章
- react-native 项目实战 -- 新闻客户端(4) -- 请求网络数据
1.Home.js /** * 首页 */ import React, { Component } from 'react'; import { AppRegistry, StyleSheet, Te ...
- Android请求网络共通类——Hi_博客 Android App 开发笔记
今天 ,来分享一下 ,一个博客App的开发过程,以前也没开发过这种类型App 的经验,求大神们轻点喷. 首先我们要创建一个Andriod 项目 因为要从网络请求数据所以我们先来一个请求网络的共通类. ...
- Android 手机卫士--构建服务端json、请求网络数据
本文地址:http://www.cnblogs.com/wuyudong/p/5900384.html,转载请注明源地址. 数据的传递 客户端:发送http请求 http://www.oxx.com/ ...
- 安卓中自定义并使用Volley框架请求网络
大家好,今天我们讲一下如何使用Volley框架请求网络,为何要使用Volley框架,这就要先说一下使用Volley框架请求网络的优点了,volley是易于定制的,即你可以根据需求来设定volley框架 ...
- 使用innerHTML生成的script节点不会发出请求与执行text属性
<!DOCTYPE html> <html> <head> <meta charset="utf-8"> <title> ...
- 在Service服务中请求网络
一.startservice方式启动 第一次startservice启动服务的时候,会走oncreate和onstart方法, 第二次startservice启动服务的时候,会走onstart方法, ...
- Android - 使用Volley请求网络数据
Android - 使用Volley请求网络数据 Android L : Android Studio 14 个人使用volley的小记,简述使用方法,不涉及volley源码 准备工作 导入Volle ...
- 解决React Native使用Fetch API请求网络报Network request failed
问题来源: 1 . 在测试fetch数据请求时,Xcode9.0以上的无法请求https, 需要在Xcode中加载项目后修改Info.plist的相关配置,具体如下参考 问题及解决方法一模一样,不再重 ...
- 安卓请求网络错误 直接在main Thread 进行网络操作出现maintreamexception
StrictMode.setThreadPolicy(new StrictMode.ThreadPolicy.Builder() .detectDiskReads().detectDiskWrites ...
随机推荐
- IOI2016Day2. Messy
题目链接:http://uoj.ac/problem/239 题目大意: 这是一道交互题,交互库维护了一个数据结构,可以存储n为二进制串,一开始你可以向空的数据结构中插入若干二进制串, 接下来这个数据 ...
- CSS(一)解析浮动塌陷与清除浮动
清除浮动方法 1.对父级设置适合CSS高度,父级元素撑开并且包含子元素. <p>固定高度</p> <div style="height: 50px;" ...
- DDD实战进阶第一波(八):开发一般业务的大健康行业直销系统(业务逻辑条件判断最佳实践)
这篇文章其实是大健康行业直销系统的番外篇,主要给大家讲讲如何在领域逻辑中,有效的处理业务逻辑条件判断的最佳实践问题. 大家都知道,聚合根.实体和值对象这些领域对象都自身处理自己的业务逻辑.在业务处理过 ...
- jenkins部署.net平台自动化构建
在引入自动化部署工具的时候,我们对比了jenkins和gitlab CI,jenkins有非常丰富的插件,配置起来方便.gitlab CI更倾向于脚本配置,当然jenkins也可以使用pipeline ...
- Winform DevExpress控件库(二) 使用SplashScreenManager控件定制程序加载页面
SplashScreenManager控件:主要作用是显示在进行耗时操作时的等待界面: 位于 工具箱 -> Navigation & Layout(导航栏与布局类控件) 目录下: 在工具 ...
- Gradle 1.12用户指南翻译——第四十七章. Build Init 插件
本文由CSDN博客貌似掉线翻译,其他章节的翻译请参见: http://blog.csdn.net/column/details/gradle-translation.html 翻译项目请关注Githu ...
- 微信小程序基础之在微信上显示和体验小程序?
随着小程序正式上线,用户现在可以通过二维码.搜索等方式体验到开发者们开发的小程序了. 用户只要将微信更新至最新版本,体验过小程序后,便可在发现页面看到小程序TAB,但微信并不会通过这个地方向用户推荐小 ...
- CentOS7.2安装Weblogic12c出现的问题
Weblogic12c安装到步骤:Prerequisite Checks 时,会进行操作系统版本的校验,即checking operating system certification. 此处 ...
- Swift:Minimizing Annotation with Type Inference
许多程序猿更喜欢比如Python和Javascript这样的动态语言,因为这些语言并不要求程序猿为每个变量声明和管理它们的类型. 在大多数动态类型的语言里,变量可以是任何类型,而类型声明是可选的或者根 ...
- JAVA面向对象-----成员内部类的访问方式
成员内部类的访问方式 1.内部类可以直接访问外部类的成员属性.(孙悟空相当于内部类飞到牛魔王的肚子里面去). 2.外部类需要访问内部类的成员属性时需要创建内部类的对象. 1.在外部类的成员函数中创建内 ...