您的位置:首页 > 产品设计 > UI/UE

ios第三方数据请求 UI_15

2015-10-09 21:53 585 查看
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
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: