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的更多相关文章

  1. iOS之数据请求NSURLConnection

    iOS之数据请求NSURLConnection NSString *lcsUrl = @"http://192.168.1.1:8080/lcsUrl"; //假设网址中有汉字.须 ...

  2. iOS服务器数据请求"汉字编码"问题

    下面记录一下数据请求问题: 1.不知道大家有木有遇到过,当数据请求的URL带有汉字的时候,请求数据肯定会报404错误,也就是参数或者是接口URL错误<虽然说404,500等错误一般都是服务器问题 ...

  3. iOS - NetRequest 网络数据请求

    1.网络请求 1.1 网络通讯三要素 1.IP 地址(主机名): 网络中设备的唯一标示.不易记忆,可以用主机名(域名). 1) IP V4: 0~255.0~255.0~255.0~255 ,共有 2 ...

  4. iOS开发——网络Swift篇&NSURL进行数据请求(POST与GET)

    NSURL进行数据请求(POST与GET)   使用Swift进行iOS开发时,不可避免的要进行远程的数据获取和提交. 其数据请求的方式既可能是POST也可能是GET.同不管是POST还是GET又可以 ...

  5. iOS中GET 和 POST 数据请求

    iOS中GET 和 POST 网络数据请求 同步请求和异步请求的差别: 1.同步请求,有主线程完成网路请求任务,在数据没有请求之前,用户的所有的交互事件应用都无法处理,会造成一种卡顿现象,影响用户体验 ...

  6. iOS第三方Api及常用框架总结

    iOS常用框架汇总: SVProgressHUD:产生覆盖层,禁止某种操作 SDWebImage: 专业下载图片框架 AFN:网络数据请求框架 MJExtension,模型对象之间互转 第三方分享第三 ...

  7. 使用 AFNetworking 进行 XML 和 JSON 数据请求

    (1)XML 数据请求 使用 AFNetworking 中的 AFHTTPRequestOperation 和 AFXMLParserResponseSerializer,另外结合第三方框架 XMLD ...

  8. iOS - Alamofire 网络请求

    前言 Alamofire 是 Swift 语言的 HTTP 网络开发工具包,相当于 Swift 实现 AFNetworking 版本.当然,AFNetworking 非常稳定,在 Mac OSX 与 ...

  9. iOS - AFNetworking 网络请求

    前言 在 iOS 开发中,一般情况下,简单的向某个 Web 站点简单的页面提交请求并获取服务器的响应,用 Xcode 自带的 NSURLConnection 是能胜任的.但是,在绝大部分下我们所需要访 ...

随机推荐

  1. ExecutorService

    接口 java.util.concurrent.ExecutorService 表述了异步执行的机制,并且可以让任务在后台执行.壹個 ExecutorService 实例因此特别像壹個线程池.事实上, ...

  2. My Stuck in C++

    My Stuck in C++ Zhong-Liang Xiang Oct. 1st, 2017 这个专题记录了对于我而言, c++迷一样的东西.

  3. [HCNA]VLAN配置Trunk接口

    实验目的 1.掌握Trunk端口的配置 2.掌握Trunk端口允许所有VLAN通过的配置方法 3.掌握Trunk端口允许特定VLAN通过的配置方法 4.理解干道链路的应用场景 实验仪器 eNSP 实验 ...

  4. H5--Web Worker

    Web Worker是H5的新特性. JS是单线程的,所以在消息队列中如果用户想进行一些阻塞操作,比如时延timeout和定时器interval,或者是数据量较大及处理过程非常长的场景,就很容易出现页 ...

  5. Go 语言指针

    Go 语言中指针是很容易学习的,Go 语言中使用指针可以更简单的执行一些任务. 接下来让我们来一步步学习 Go 语言指针. 我们都知道,变量是一种使用方便的占位符,用于引用计算机内存地址. Go 语言 ...

  6. Go 语言函数

    函数是基本的代码块,用于执行一个任务. Go 语言最少有个 main() 函数. 你可以通过函数来划分不同功能,逻辑上每个函数执行的是指定的任务. 函数声明告诉了编译器函数的名称,返回类型,和参数. ...

  7. PHP Zip File 函数

    通过 PHP 中的相关函数,你可以实现 zip 文件的解压缩操作! PHP Zip File 简介 Zip File 函数允许您读取压缩文件. 安装 如需在服务器上运行 Zip File 函数,必须安 ...

  8. RunLoop总结:RunLoop基础知识

    没有实际应用场景,很难理解一些抽象空洞的东西,所以前面几篇文章先介绍了RunLoop的几个使用场景. 另外AsyncDisplayKit中也有大量使用RunLoop的示例. 关于实际的使用RunLoo ...

  9. Android二维码扫描、生成

    Android二维码扫描.生成 现在使用二维码作为信息的载体已经越来越普及,那么二维码的生成以及扫描是如何实现的呢 google为我们提供了zxing开源库供我们使用 zxing GitHub源码地址 ...

  10. static 变量(静态变量)

    在C++的面向对象编程中,static还可以加在类的数据成员或成员函数之前.这样定义的数据成员或成员函数就被类所拥有,而不再属于类的对象. #include <iostream> usin ...