ios第三方数据请求 UI_15
AppDelegate.m
//指定根视图
self.window.rootViewController = [[[UINavigationController alloc]initWithRootViewController:[HomeViewController new]]autorelease];
自定义cell文件:
NewsCell.h
#import <UIKit/UIKit.h> @class News; @interface NewsCell : UITableViewCell //写一个方法给cell上的控件赋值 - (void)assiginValueByNews : (News *)news; //定义一个类方法返回cell的行高 //根据传进来的数据,计算当前cell的行高 + (CGFloat)cellHeight : (News *)news; @end
NewsCell.m
#import "News.h"
#import "UIImageView+WebCache.h"
@interface NewsCell ()
@property(nonatomic,retain)UIImageView *picView;
@property(nonatomic,retain)UILabel *titleLabel;
@property(nonatomic,retain)UILabel *summaryLabel;
@end
@implementation NewsCell
- (void)dealloc{
self.picView = nil;
self.titleLabel = nil;
self.summaryLabel = nil;
[super dealloc];
}
- (id)initWithStyle:(UITableViewCellStyle)style reuseIdentifier:(NSString *)reuseIdentifier{
if (self = [super initWithStyle:style reuseIdentifier:reuseIdentifier]) {
[self.contentView addSubview:self.titleLabel];
[self.contentView addSubview:self.summaryLabel];
[self.contentView addSubview:self.picView];
}
return self;
}
//懒加载
//picView
- (UIImageView *)picView{
if (_picView == nil) {
self.picView = [[[UIImageView alloc]initWithFrame:CGRectMake(0, 5, 80, 90)]autorelease];
// self.picView.backgroundColor = [UIColor orangeColor];
}
return [[_picView retain]autorelease];
}
//titleLabel
- (UILabel *)titleLabel{
if (_titleLabel == nil) {
self.titleLabel = [[[UILabel alloc]initWithFrame:CGRectMake(80, 5, 250, 30)]autorelease];
self.titleLabel.backgroundColor = [UIColor orangeColor];
//设置文字大小
self.titleLabel.font = [UIFont systemFontOfSize:17.0];
//根据内容换行
self.titleLabel.numberOfLines = 0;
}
return [[_titleLabel retain]autorelease];
}
//summmaryLabel
- (UILabel *)summaryLabel{
if (_summaryLabel == nil) {
self.summaryLabel = [[[UILabel alloc]initWithFrame:CGRectMake(10, 100, 305, 55)]autorelease];
// self.summaryLabel.backgroundColor = [UIColor cyanColor];
//设置文字大小
self.summaryLabel.font = [UIFont systemFontOfSize:17.0];
//根据内容换行
self.summaryLabel.numberOfLines = 0;
}
return [[_summaryLabel retain]autorelease];
}
//写一个方法给cell上的控件赋值
- (void)assiginValueByNews : (News *)news{
//1.使用图片异步加载的方法添加图片,此时使用SDWebImage第三方,先加载一张默认图片作为占位符,等从网上请求下来数据的时候再赋值给控件
[self.picView sd_setImageWithURL:[NSURL URLWithString:news.hot_pic]placeholderImage:[UIImage imageNamed:@"1.jpg"]];
// self.imageView.image = [UIImage imageNamed:@"1.jpg"];
self.titleLabel.text = news.title;
self.summaryLabel.text = news.summary;
//summaryLabel
//修改完成之后重新计算self.summaryLabel的大小
CGRect summaryRecct = self.summaryLabel.frame;
//修改summaryRect的高
summaryRecct.size.height = [[self class]summaryLabelHeight:news.summary];
//将修改过后的大小赋值给self.summaryLabel.frame
self.summaryLabel.frame = summaryRecct;
//titieLabel
//修改完成之后重新计算self.titleLabel的大小
CGRect titleRect = self.titleLabel.frame;
//修改它的高
titleRect.size.height = [[self class]titleLabelHeight:news.title];
//将修改过后的大小赋值给self.titleLabel.frame
self.titleLabel.frame = titleRect;
}
//title
+ (CGFloat)titleLabelHeight : (NSString *)title{
CGSize contextSize = CGSizeMake(250, 0);
//设置计算时文本的一些属性,比如:字体的大小
NSDictionary *attributes = @{NSFontAttributeName : [UIFont systemFontOfSize:17.0]};
CGRect titleRect = [title boundingRectWithSize:contextSize options:NSStringDrawingUsesLineFragmentOrigin attributes:attributes context:nil];
return titleRect.size.height;
}
//summary
+ (CGFloat)summaryLabelHeight : (NSString *)summary{
CGSize contextSize = CGSizeMake(305, 0);
//设置计算时文本的一些属性,比如:字体的大小
NSDictionary *attributes = @{NSFontAttributeName : [UIFont systemFontOfSize:17.0]};
CGRect summaryRect = [summary boundingRectWithSize:contextSize options:NSStringDrawingUsesLineFragmentOrigin attributes:attributes context:nil];
return summaryRect.size.height;
}
//定义一个类方法返回cell的行高
//根据传进来的数据,计算当前cell的行高
+ (CGFloat)cellHeight : (News *)news{
CGFloat summaryHeight = [self summaryLabelHeight:news.summary];
CGFloat titleHeight = [self titleLabelHeight:news.title];
return 5 + 30 + 10 + 10 +30 +summaryHeight + titleHeight;
}
model数据类型文件:
News.h
#import <Foundation/Foundation.h> @interface News : NSObject @property(nonatomic,copy)NSString *title;//标题 @property(nonatomic,copy)NSString *hot_pic;//图片 @property(nonatomic,copy)NSString *summary;//新闻内容 @end
News.m
@implementation News
- (void)dealloc{
self.title = nil;
self.summary = nil;
self.hot_pic = nil;
[super dealloc];
}
- (void)setValue:(id)value forUndefinedKey:(NSString *)key{
//碰到key值是description 时候,将value赋值给summary
if ([key isEqualToString:@"description"]) {
self.summary = value;
}
}
@end
开始使用第三方数据请求:
HomeViewController.m
#import "NewsCell.h"
#import "AFNetworking.h"
#import "News.h"
#define kNewsCell @"news-cell"
@interface HomeViewController ()
@property(nonatomic,retain)NSMutableArray *dataSource;
@end
@implementation HomeViewController
- (void)viewDidLoad {
[super viewDidLoad];
self.dataSource = nil;
self.title = @"新闻";
[self.navigationController.navigationBar setBackgroundImage:[UIImage imageNamed:@"3"] forBarMetrics:UIBarMetricsDefault];
//注册
[self.tableView registerClass:[NewsCell class] forCellReuseIdentifier:kNewsCell];
//调用从网络请求数据
[self readDataFormNetWork];
}
//懒加载
- (NSMutableArray *)dataSource{
if (_dataSource == nil) {
self.dataSource = [NSMutableArray arrayWithCapacity:0];
}
return [[_dataSource retain]autorelease];
}
//从网络请求数据
- (void)readDataFormNetWork{
//1.准备网址对象
NSString *urlStr = @"http://www.bjnews.com.cn/api/get_hotlist.php?page=1";
//2.使用第三方AFNetWorking,做网络请求,现在是一种主流的网络请求方式
//如果导入的第三方文件不支持MRC工程环境,选中target-->Bulid phases -->complie sources 将对应的文件后加入 -fobjc-arc
//3.创建请求管理者
AFHTTPRequestOperationManager *manger = [AFHTTPRequestOperationManager manager];
//4.设置支持的数据格式
manger.responseSerializer.acceptableContentTypes = [NSSet setWithObject:@"text/html"];
//5.请求数据
__block typeof(self)weakself = self;
[manger GET:urlStr parameters:nil success:^(AFHTTPRequestOperation *operation, id responseObject) {
//responseObject 请求下来的数据在这里存储,并且这个数据已经解析好了
// NSLog(@"%@",responseObject);
NSMutableArray *mArray = responseObject[@"list"];
for (NSDictionary *dic in mArray) {
//创建model对象
News *news = [[News alloc]init];
//给model 赋值
[news setValuesForKeysWithDictionary:dic];
//添加到存放所有新闻对象的数组
[weakself.dataSource addObject:news];
[news release];
}
// NSLog(@"%@",self.dataSource); 验证!
//刷新UI界面
[weakself.tableView reloadData];
} failure:^(AFHTTPRequestOperation *operation, NSError *error) {
//存储请求失败的信息
}];
}
显示在cell的控件上:
#pragma mark - Table view data source
- (NSInteger)numberOfSectionsInTableView:(UITableView *)tableView {
// Return the number of sections.
return 1;
}
- (NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section {
// Return the number of rows in the section.
return self.dataSource.count;
}
- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath {
NewsCell *cell = [tableView dequeueReusableCellWithIdentifier:kNewsCell forIndexPath:indexPath];
News *news = self.dataSource[indexPath.row];
[cell assiginValueByNews:news];
//选中cell的背景颜色
cell.selectedBackgroundView = [[[UIView alloc]initWithFrame:cell.frame]autorelease];
cell.selectedBackgroundView.backgroundColor = [UIColor greenColor];
return cell;
}
- (CGFloat)tableView:(UITableView *)tableView heightForRowAtIndexPath:(NSIndexPath *)indexPath{
return [NewsCell cellHeight:self.dataSource[indexPath.row]];
}
素材下载:
第三方AFNetWorking、SDWebImage下载:http://pan.baidu.com/s/1FOOkm
ios第三方数据请求 UI_15的更多相关文章
- iOS之数据请求NSURLConnection
iOS之数据请求NSURLConnection NSString *lcsUrl = @"http://192.168.1.1:8080/lcsUrl"; //假设网址中有汉字.须 ...
- iOS服务器数据请求"汉字编码"问题
下面记录一下数据请求问题: 1.不知道大家有木有遇到过,当数据请求的URL带有汉字的时候,请求数据肯定会报404错误,也就是参数或者是接口URL错误<虽然说404,500等错误一般都是服务器问题 ...
- iOS - NetRequest 网络数据请求
1.网络请求 1.1 网络通讯三要素 1.IP 地址(主机名): 网络中设备的唯一标示.不易记忆,可以用主机名(域名). 1) IP V4: 0~255.0~255.0~255.0~255 ,共有 2 ...
- iOS开发——网络Swift篇&NSURL进行数据请求(POST与GET)
NSURL进行数据请求(POST与GET) 使用Swift进行iOS开发时,不可避免的要进行远程的数据获取和提交. 其数据请求的方式既可能是POST也可能是GET.同不管是POST还是GET又可以 ...
- iOS中GET 和 POST 数据请求
iOS中GET 和 POST 网络数据请求 同步请求和异步请求的差别: 1.同步请求,有主线程完成网路请求任务,在数据没有请求之前,用户的所有的交互事件应用都无法处理,会造成一种卡顿现象,影响用户体验 ...
- iOS第三方Api及常用框架总结
iOS常用框架汇总: SVProgressHUD:产生覆盖层,禁止某种操作 SDWebImage: 专业下载图片框架 AFN:网络数据请求框架 MJExtension,模型对象之间互转 第三方分享第三 ...
- 使用 AFNetworking 进行 XML 和 JSON 数据请求
(1)XML 数据请求 使用 AFNetworking 中的 AFHTTPRequestOperation 和 AFXMLParserResponseSerializer,另外结合第三方框架 XMLD ...
- iOS - Alamofire 网络请求
前言 Alamofire 是 Swift 语言的 HTTP 网络开发工具包,相当于 Swift 实现 AFNetworking 版本.当然,AFNetworking 非常稳定,在 Mac OSX 与 ...
- iOS - AFNetworking 网络请求
前言 在 iOS 开发中,一般情况下,简单的向某个 Web 站点简单的页面提交请求并获取服务器的响应,用 Xcode 自带的 NSURLConnection 是能胜任的.但是,在绝大部分下我们所需要访 ...
随机推荐
- java反射 概念
一.什么是反射机制 简单的来说,反射机制指的是程序在运行时能够获取自身的信息.在java中,只要给定类的名字, 那么就可以通过反射机制来获得类的所有信息. 二.哪里用到反射机制 ...
- HybridAPP开发框架Ionic+AngularJS+Cordova搭建
Ionic Ionic是一个新的.可以使用HTML5构建混合移动应用的用户界面框架,它自称为是"本地与HTML5的结合".该框架提供了很多基本的移动用户界面范例,例如像列表(lis ...
- reload(sys)后print失效问题解决
python版本: python2.7.6 #查看python默认编码格式 >>> import sys >>> print sys.getdefaultencod ...
- Linux下DIR,dirent,stat等结构体详解
摘自:http://www.liweifan.com/2012/05/13/linux-system-function-files-operation/ 最近在看Linux下文件操作相关章节,遇到了这 ...
- python笔记五(条件判断/循环/break和continue)
一 条件判断 if <条件判断1>: <执行1> elif <条件判断2>: <执行2> elif <条件判断3>: <执行3> ...
- MYSQL 索引类型、什么情况下用不上索引、什么情况下不推荐使用索引
mysql explain的使用: http://blog.csdn.net/kaka1121/article/details/53394426 索引类型 在数据库表中,对字段建立索引可以大大提高查询 ...
- 在Spring Boot中输出REST资源
前面我们我们已经看了Spring Boot中的很多知识点了,也见识到Spring Boot带给我们的各种便利了,今天我们来看看针对在Spring Boot中输出REST资源这一需求,Spring Bo ...
- C实战:强大的程序调试工具GDB
C实战:强大的程序调试工具GDB 1.基本调试 这里只列举最最常用的GDB命令. 1.1 启动GDB gdb program:准备调试程序.也可以直接进入gdb,再通过file命令加载. 1.2 添加 ...
- springMVC源码分析--异常处理机制HandlerExceptionResolver简单示例(一)
springMVC对Controller执行过程中出现的异常提供了统一的处理机制,其实这种处理机制也简单,只要抛出的异常在DispatcherServlet中都会进行捕获,这样就可以统一的对异常进行处 ...
- 通过一个例子了解MapReduce
写MapReduce程序的步骤: 把问题转化为MapReduce模型: 设置运行参数: 写map类: 写reduce类: 例子:统计单词个数 Map的任务是将内容用" "分开,然后 ...