聚合获取网络接口数据

这是一个获取聚合网络上的黄金数据,把获取到的数据展示在表格上

首先需要导入4个SDK,分别是  MJRefresh   用于刷新界面的SDK  ;

                                              MBProgressHUD   用于弹出提示信息;

                                              libWeiboSDK 微博的SDK

                                              WeChatSDK1.8.3_NoPay  微信的SDK

如下图所示:






首先需要在viewController.m中导入头文件,如图:


在viewController.m中定义3个属性,分别表示,表格的数据源,表格,下拉刷新控件; 其中表格数据源用全局的变量表示;如图:



初始化表格视图,记得遵守协议

//初始化表格视图

    self.tbv=[[UITableView alloc]initWithFrame:self.view.frame style:UITableViewStylePlain];


    //注册单元格

    [self.tbv registerNib:[UINib nibWithNibName:@"GoldTableViewCell" bundle:[NSBundle mainBundle]] forCellReuseIdentifier:@"string"];

self.tbv.delegate=self;

self.tbv.dataSource=self;

 [self.viewaddSubview:self.tbv];


 //实例化下拉刷新控件

    self.mjHeaderView =[[MJRefreshHeaderView alloc]initWithScrollView:self.tbv];


 //做一个弱引用

    __weak typeof(self)weakSelf=self;

    //下拉回调的代码

    self.mjHeaderView.beginRefreshingBlock = ^(MJRefreshBaseView *refreshView) {

        [weakSelfgetHttpData];

    };


    //把弹出的视图置在屏幕的最前方

    [self.view bringSubviewToFront:self.shareView];


//几行

-(NSInteger)tableView:(UITableView*)tableView numberOfRowsInSection:(NSInteger)section

{

    return tableDataArr.count;

}


//设置表格的cell

-(UITableViewCell*)tableView:(UITableView*)tableView cellForRowAtIndexPath:(NSIndexPath*)indexPath

{

     staticNSString* string=@"string";

//设置cell时,不是UITabViewCell,而是用自己的定义的GoldTableViewCell,以下会提到

     GoldTableViewCell * cell=[tableView dequeueReusableCellWithIdentifier:string forIndexPath:indexPath];


    //获取cell对应的model对象

    Gold* gold =tableDataArr[indexPath.row];


    //cell赋值

    cell.variety.text=gold.variety;

    cell.latestpri.text=gold.latestpri;

    cell.openpri.text=gold.openpri;

    cell.maxpri.text=gold.maxpri;

    cell.minpri.text=gold.minpri;


    returncell;

}



接下里创建一个view视图,就是为了连接上面cell中的cell的样式,创建一个类,让他继承于UITableViewCell,记得勾上xib选项,因为要用到脱线拖拽cell中的子控件,子控件全部都是属性

如图所示:



下面开始脱线,把所有的种类lable 拖拽到GoldTableViewCell.h中




然后再创建一个model模型,为了获取数据时赋值,让他继承自NSObject,如图所示:



在Gold.h中定义属性,一定要和聚合上的数据属性一致,不能少一个,不然表格赋值时会崩溃

@property(nonatomic,copy)NSString* variety;  //品种

@property(nonatomic,copy)NSString * latestpri;//最新价

@property(nonatomic,copy)NSString* openpri;  //开盘价

@property(nonatomic,copy)NSString* maxpri;  //最高价

@property(nonatomic,copy)NSString* minpri;  //最低价

@property(nonatomic,copy)NSString* limit;    //跌涨幅

@property(nonatomic,copy)NSString* yespri;  //昨收价

@property(nonatomic,copy)NSString * totalvol; //总成交量

@property(nonatomic,copy)NSString* time;    //更新时间



回到ViewController.m中,导入两个头文件   #import "GoldTableViewCell.h"   和  #import"Gold.h"



在 viewDidLoad 中写入下面调用的自定义方法

//获取自定义的网络数据

    [self getHttpData];


然后写入获取聚合网络数据的方法实现



//获取网络数据

-(void)getHttpData

{

    //等待指示器显示

    [UIApplication sharedApplication].networkActivityIndicatorVisible=YES;


    //网址字符串拼接

    NSString * urlStr=[NSString stringWithFormat:@"http://web.juhe.cn:8080/finance/gold/shgold?key=%@&v=1",@"1b9f570e367ce24e51135d69eac7d04e"];


    //如果网址字符串中有汉字,对汉字做处理

    urlStr=[urlStrstringByAddingPercentEncodingWithAllowedCharacters:[NSCharacterSet URLFragmentAllowedCharacterSet]];


    //网址对象

    NSURL* url=[NSURLURLWithString:urlStr];


    //做成请求对象,设置缓存策略和超时时长

    NSURLRequest * req=[NSURLRequest requestWithURL:url cachePolicy:NSURLRequestReloadIgnoringCacheData timeoutInterval:5.0];


    //请求网络数据

    [[[NSURLSessionsharedSession]dataTaskWithRequest:reqcompletionHandler:^(NSData*_Nullabledata,NSURLResponse*_Nullableresponse,NSError*_Nullableerror) {

        //停止菊花转动

        dispatch_async(dispatch_get_main_queue(), ^{

            [UIApplication sharedApplication].networkActivityIndicatorVisible=NO;


            //停止下拉刷新

            [self.mjHeaderViewendRefreshing];

        });


        //如果发生服务器或超时错误,给提示

        if(error!=nil)

        {

        dispatch_async(dispatch_get_main_queue(), ^{

            [self showMBAlertWithMessage:@"服务器错误"];

        });

            return;

        }


        //json数据转换

        NSError* jsonError=nil;

        id jsonData=[NSJSONSerialization JSONObjectWithData:data options:NSJSONReadingAllowFragments error:&jsonError];



        //如果转换失败

        if(jsonError!=nil)

        {

            dispatch_async(dispatch_get_main_queue(), ^{

                [self showMBAlertWithMessage:@"网络数据错误"];

            });

            return;

        }



        //得到接口数据resultcode=200字段的值

        intresultcode=[jsonData[@"resultcode"]intValue];


        //如果不是200,表示发生错误

        if(resultcode!=200)

        {

            dispatch_async(dispatch_get_main_queue(), ^{

                [selfshowMBAlertWithMessage:jsonData[@"reason"]];

            });

            return;

        }




        //获取result字段对应的数组

        NSArray* resultArr=jsonData[@"result"];


        //获取数组中的大字典

        NSDictionary* allDic=[resultArrfirstObject];



        //实例化一个可变数组,用于储存model对象

        NSMutableArray * modeArr=[[NSMutableArray alloc]init];


        //遍历大字典中所有的小字典

        for(idkeyinallDic) {

            NSDictionary* dic=[allDicobjectForKey:key];

            Gold* g=[[Goldalloc]init];


            [gsetValuesForKeysWithDictionary:dic];


            [modeArraddObject:g];


        }


        //将modeArr数组赋值给表格数组,刷新表格

        dispatch_async(dispatch_get_main_queue(), ^{

            self->tableDataArr=[modeArrcopy];


            [self.tbvreloadData];

        });



    }]resume];

}




接下来封装提示框的方法

//显示提示框的封装方法

-(void)showMBAlertWithMessage:(NSString*)msg

{

    MBProgressHUD * hud=[[MBProgressHUD alloc]initWithView:self.view];


    hud.mode=MBProgressHUDModeText;


    hud.removeFromSuperViewOnHide=YES;


    hud.labelText=msg;


    [self.viewaddSubview:hud];


    [hudshow:YES];


    [hudhide:YES afterDelay:3.0];

}


这样就做完了网络获取数据的代码,接下来在这个基础上做点击单元格实现分享当前单元格内容的方法


在全局变量中定义个全局变量 NSString* shareString;//分享的文本内容

首先需要定义一个属性,为了点击单元格弹出分享的视图,在这里咱们就用一个UIview来做

@property(nonatomic,strong)UIView * shareView;//分享视图



在 @interface ViewController ()<UITableViewDelegate,UITableViewDataSource> 上面设置两个宏定义,一个是屏幕的宽,一个是屏幕的高

#define SCR_W  [UIScreen mainScreen].bounds.size.width

#define SCR_H  [UIScreen mainScreen].bounds.size.height


然后用懒加载实现分享视图

//分享视图实例化

-(UIView* )shareView

{

    if(!_shareView)

    {

        _shareView=[[UIView alloc]initWithFrame:CGRectMake(0, SCR_H, SCR_W, 200)];

        _shareView.backgroundColor=[UIColor lightGrayColor];


        //单击手势

        UITapGestureRecognizer * tap=[[UITapGestureRecognizer alloc]initWithTarget:self action:@selector(hideShareView:)];


        [_shareView addGestureRecognizer:tap];



        //按钮标题数组

        NSArray* btnTitles=@[@"微信好友",@"朋友圈",@"QQ",@"微博"];



        //设置按钮的宽度

        CGFloatbtnW=60;


        //按钮间的距离

        CGFloatdis=(SCR_W-btnW*btnTitles

                     .count)/(btnTitles.count+1);


        //使用for循环构建按钮

        for(inti=0; i

            //实例化

            UIButton * btn=[UIButton buttonWithType:UIButtonTypeCustom];


            //设置位置

            btn.frame=CGRectMake(dis+(dis+btnW)*i,70, btnW, btnW);


            //做成圆角

            btn.clipsToBounds=YES;

            btn.layer.cornerRadius=btnW/2;


            //设置标题

            [btnsetTitle:btnTitles[i] forState:UIControlStateNormal];


            //设置背景颜色

            btn.backgroundColor=[UIColor blueColor];


            //设置字体的颜色

            [btnsetTitleColor:[UIColor whiteColor] forState:UIControlStateNormal];


            //设置tag值,为了区分点击的哪一个按钮

            btn.tag=100+1;


            [btnaddTarget:self action:@selector(shareBtnDidPress:) forControlEvents:UIControlEventTouchUpInside];


            //添加到分享视图上

            [_shareViewaddSubview:btn];

        }


    }

    return _shareView;

}

再创建一个点击单元格的方法

-(void)tableView:(UITableView*)tableView didSelectRowAtIndexPath:(NSIndexPath*)indexPath

{

    //得到选中cell对应的model

    Gold* gold=[tableDataArrobjectAtIndex:indexPath.row];


    //分享字符串赋值

    shareString=[NSStringstringWithFormat:@"黄金%@,最新报价%@元,最高%@元,最低%@元",gold.variety,gold.latestpri,gold.maxpri,gold.minpri];


    //加一个弹出的时间间隔

    [UIView animateWithDuration:0.138 animations:^{

        //显示分享视图

        self.shareView.frame=CGRectMake(0,SCR_H-200,SCR_W,200);

    }];

}

点击分享视图,隐藏分享视图的方法


//隐藏分享视图

-(void)hideShareView:(id)sender

{

    //视图隐藏的时间

    [UIView animateWithDuration:0.138 animations:^{

        //隐藏按钮视图

        self.shareView.frame=CGRectMake(0,SCR_H,SCR_W,200);

    }];

}

在AppDelegate.m中写


#import "libWeiboSDK/WeiboSDK.h"


#define weibo_AppKey        @"3970277534"

#define weibo_RedirectURI    @"https://www.sina.com"

#define weixin_AppKey    @"wx324a10d04bd2cd5c"


//微信回调方法

-(void) onResp:(BaseResp*)resp

{

 //授权登录回调

    if([resp isKindOfClass:[SendAuthResp class]])

    {


    }

    //分享回调

    else if([resp isKindOfClass:[SendMessageToWXReq class]])

    {


    }

}


 //向微信注册

    [WXApi registerApp:weixin_AppKey];


    //向微博去注册

     [WeiboSDK registerApp:weibo_AppKey];





- (BOOL)application:(UIApplication*)application handleOpenURL:(NSURL*)url {

    //获取回调的网址字符串

    NSString * urlstr=url.absoluteString;


    if([urlstrcontainsString:weixin_AppKey])

    {

        return  [WXApi handleOpenURL:url delegate:self];

    }

    elseif([urlstrcontainsString:weibo_AppKey])

    {

        return [WeiboSDK handleOpenURL:url delegate:self];

    }

    return nil;

}

- (BOOL)application:(UIApplication*)application openURL:(NSURL*)url sourceApplication:(NSString*)sourceApplication annotation:(id)annotation {

    return [WXApi handleOpenURL:url delegate:self];

}



遵守协议

@interface AppDelegate ()<WXApiDelegate,WeiboSDKDelegate>



回到ViewController.m

//分享按钮触发方法

-(void)shareBtnDidPress:(UIButton* )sender

{

    //隐藏分享视图

    [self hideShareView:nil];


    switch(sender.tag) {

        case100://微信好友

        {

            NSLog(@"微信好友分享");

            SendMessageToWXReq *req = [[SendMessageToWXReq alloc] init];

            req.bText=YES;

            req.text=shareString;

            req.scene=WXSceneSession;

            [WXApisendReq:req];

        }

            break;

        case101://朋友圈

        {

            NSLog(@"朋友圈分享");

            SendMessageToWXReq *req = [[SendMessageToWXReq alloc] init];

            req.bText=YES;

            req.text=shareString;

            req.scene=WXSceneTimeline;

            [WXApisendReq:req];

        }

            break;

        case102://QQ

        {

            NSLog(@"QQ分享");

        }

            break;

        case103://微博

        {

            NSLog(@"微博分享");

            //实例化分享的帝乡

            WBMessageObject *message = [WBMessageObject message];


            //分享的样式是文本样式

            message.text=shareString;


            //分享样式为照片

            UIImage* img=[UIImageimageNamed:@"1.jpeg"];

            WBImageObject* imageObject=[WBImageObjectobject];


            imageObject.imageData=UIImageJPEGRepresentation(img,1.0);

            message.imageObject=imageObject;


            //分享的样式为网址

            //message.mediaObject=@"";


            //分享的样式为视频

            //message.videoObject=@"";



            //将信息分享

            WBSendMessageToWeiboRequest * request=[[WBSendMessageToWeiboRequest alloc]init];


            request.message=message;


            [WeiboSDKsendRequest:request];

        }

            break;


        default:

            break;

    }

}



依赖库第一个官方文档上没有提到




©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 213,335评论 6 492
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 90,895评论 3 387
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 158,766评论 0 348
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 56,918评论 1 285
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 66,042评论 6 385
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 50,169评论 1 291
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 39,219评论 3 412
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 37,976评论 0 268
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 44,393评论 1 304
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 36,711评论 2 328
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 38,876评论 1 341
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 34,562评论 4 336
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 40,193评论 3 317
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 30,903评论 0 21
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 32,142评论 1 267
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 46,699评论 2 362
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 43,764评论 2 351

推荐阅读更多精彩内容