一.实现业务处理层
// 创建单利方法
+ (instancetype)shareLoadData;
// 创建解析方法
- (void)getContent:(NSString *)url;
////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
实现方法
// 创建单利变量
static LoadData *ld;
@implementation LoadData
{
__block NSMutableDictionary *ContentDic,*ContentDic1;
}
// 创建单利方法
+ (instancetype)shareLoadData{
//
static dispatch_once_t onceToken;
dispatch_once(&onceToken, ^{
ld = [[LoadData alloc]init];
});
return ld;
}
+ (instancetype)allocWithZone:(struct _NSZone *)zone{
if (!ld) {
ld = [super allocWithZone:zone];
}
return ld;
}
- (id)copy{
return self;
}
- (id)mutableCopy{
return self;
}
// 解析方法
- (void)getContent:(NSString *)url{
NSURLSession *session = [NSURLSession sharedSession];
NSURLSessionTask *task = [session dataTaskWithURL:[NSURL URLWithString:url] completionHandler:^(NSData * _Nullable data, NSURLResponse * _Nullable response, NSError * _Nullable error) {
// 用系统自带的JSON解析
self->ContentDic = [NSJSONSerialization JSONObjectWithData:data options:0 error:nil];
// 回到主线程发送通知
dispatch_async(dispatch_get_main_queue(), ^{
[[NSNotificationCenter defaultCenter]postNotificationName:@"getContent" object:self->ContentDic];
});
}];
[task resume];
}
@end
二.实现自定义cell
// 创建三个控件
@property(nonatomic,strong)UILabel *titleLb,*timeLb;
@property(nonatomic,strong)UIImageView *img;
// 实现这三个控件
- (instancetype)initWithStyle:(UITableViewCellStyle)style reuseIdentifier:(NSString *)reuseIdentifier{
self = [super initWithStyle:style reuseIdentifier:reuseIdentifier];
if (self) {
[self addSubview:self.titleLb];
[self addSubview:self.timeLb];
[self addSubview:self.img];
}
return self;
}
- (UILabel *)titleLb{
if (!_titleLb) {
// 初始化位置
_titleLb = [[UILabel alloc]initWithFrame:CGRectMake(10, 20,240, 100)];
// 设置自动换行
_titleLb.numberOfLines = 0;
// 设置背景颜色
// _titleLb.backgroundColor = [UIColor greenColor];
// 设置字体大小
_titleLb.font = [UIFont systemFontOfSize:22];
}
return _titleLb;
}
- (UIImageView *)img{
if (!_img) {
// 初始化位置
_img = [[UIImageView alloc]initWithFrame:CGRectMake(260,10,120,120)];
// 设置背景颜色
_img.backgroundColor = [UIColor yellowColor];
}
return _img;
}
- (UILabel *)timeLb{
if (!_timeLb) {
// 初始化位置
_timeLb = [[UILabel alloc]initWithFrame:CGRectMake(240,130,195,40)];
// 设置背景颜色
// _timeLb.backgroundColor = [UIColor blueColor];
// 设置字体大小
_timeLb.font = [UIFont systemFontOfSize:16];
}
return _timeLb;
}
三.在ViewController控制器中添加
#import "ViewController.h"
#import "UIImageView+WebCache.h"
#import "LoadData.h"
#import "MyTableViewCell.h"
#import "MJRefresh.h"
#import "MJRefreshHeader.h"
#import "MJRefreshAutoFooter.h"
#import "MBProgressHUD.h"@interface ViewController (){
// 创建全局表格
UITableView *_tableView;
// 创建字典用于接收
NSDictionary *_ContentDic;
// 创建数组用于获取字典中的数组
NSArray *_ContentArray;
// 定义网址
NSURL *_PathUrl;
// 定义变量
int *num;
}
@end
@implementation ViewController
- (void)viewDidLoad {
[super viewDidLoad];
num = 3;
// 注册通知
[[NSNotificationCenter defaultCenter]addObserver:self selector:@selector(getContent:) name:@"getContent" object:nil];
// 初始化表格
_tableView = [[UITableView alloc]initWithFrame:self.view.frame style:UITableViewStylePlain];
// 设置代理
_tableView.delegate = self;
_tableView.dataSource = self;
// 添加到主视图
[self.view addSubview:_tableView];
// 调用业务处理层方法
[self Load];
// 创建下拉刷新控件
_tableView.mj_header = [MJRefreshNormalHeader headerWithRefreshingTarget:self refreshingAction:@selector(MJHeader)];
_tableView.mj_footer = [MJRefreshAutoNormalFooter footerWithRefreshingTarget:self refreshingAction:@selector(loadMore)];
}
#pragma mark - 创建业务处理层方法
- (void)Load{
// 每次刷新增加新闻数量
num = num + 1;
// 创建业务处理层对象
LoadData *ld = [LoadData shareLoadData];
NSString *TEXT_URL = [NSString stringWithFormat:@"https://way.jd.com/jisuapi/get?channel=头条&num=%d&start=0&appkey=54e619938bc38b40151c7bc35a29067e",num];
// 将网址转换成UTF8格式传过去
NSString *str = [TEXT_URL stringByAddingPercentEscapesUsingEncoding:NSUTF8StringEncoding];
// 调用里面的方法
[ld getContent:str];
}
#pragma mark - 发送通知接收方法
- (void)getContent:(NSNotification *)notifi{
// 接收数据
_ContentDic = notifi.object;
// dic = [_ContentDic mutableCopy];
// 刷新表格
[_tableView reloadData];
}
#pragma mark - 下拉刷新控件方法
- (void)MJHeader{
// 创建菊花加载控件
MBProgressHUD *HUD = [MBProgressHUD showHUDAddedTo:self.view animated:YES];
// 回到主线程刷新表格
dispatch_async(dispatch_get_main_queue(), ^{
// 刷新表格
[self->_tableView reloadData];
// 刷新时间
[HUD setMinShowTime:1];
// 一秒后隐藏
[HUD hide:YES];
});
// 调用业务处理层方法
[self Load];
// 刷新
[_tableView.mj_header endRefreshing];
}
#pragma mark - 上拉刷新控件方法
- (void)loadMore{
// 调用业务处理层方法
[self Load];
// 刷新表格
[_tableView reloadData];
// 结束上拉刷新
[_tableView.mj_footer endRefreshing];
}
#pragma mark - 表格数据源方法
- (NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section{
// 用数组接收字典中的数据
_ContentArray = _ContentDic[@"result"][@"result"][@"list"];
// 返回数组中的个数
return _ContentArray.count;
}
- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath{
static NSString *str = @"cell";
MyTableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:str];
// 判断
if (!cell) {
// 创建cell
cell = [[MyTableViewCell alloc]initWithStyle:UITableViewCellStyleDefault reuseIdentifier:str];
}
// 获取数组中的字典
NSDictionary *dic = _ContentArray[indexPath.row];
// 获取标题并赋值
cell.titleLb.text = dic[@"title"];
// 获取时间并赋值
cell.timeLb.text = dic[@"time"];
// 用SDWebImage第三方库加载图片
NSString *URlStr = dic[@"pic"];
_PathUrl = [NSURL URLWithString:URlStr];
[cell.img sd_setImageWithURL:_PathUrl placeholderImage:[UIImage imageNamed:@"机器人.jpg"]];
return cell;
}
- (CGFloat)tableView:(UITableView *)tableView heightForRowAtIndexPath:(NSIndexPath *)indexPath{
return 180;
}
@end