美文网首页
仿今日头条新闻上下拉刷新

仿今日头条新闻上下拉刷新

作者: 小緈福 | 来源:发表于2018-06-01 08:15 被阅读0次

    一.实现业务处理层

    // 创建单利方法

    + (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

    相关文章

      网友评论

          本文标题:仿今日头条新闻上下拉刷新

          本文链接:https://www.haomeiwen.com/subject/snkhsftx.html