zoukankan      html  css  js  c++  java
  • iOS 获取快递物流信息(GCD异步加载)

    #import <UIKit/UIKit.h>
    
    @interface AppDelegate : UIResponder <UIApplicationDelegate>
    
    @property (strong, nonatomic) UIWindow *window;
    
    
    @end
    #import "AppDelegate.h"
    #import "RootViewController.h"
    @interface AppDelegate ()
    
    @end
    
    @implementation AppDelegate
    
    
    - (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions {
        self.window = [[UIWindow alloc] initWithFrame:[[UIScreen mainScreen] bounds]];
        // Override point for customization after application launch.
        self.window.backgroundColor = [UIColor whiteColor];
        
        self.window.rootViewController = [[RootViewController alloc] init];
        
        [self.window makeKeyAndVisible];
        return YES;
    }
    
    @end
    #import <UIKit/UIKit.h>
    
    @interface RootViewController : UIViewController
    
    @end
    #import "RootViewController.h"
    
    #define cellWidth  [UIScreen mainScreen].bounds.size.width
    @interface RootViewController ()<UITableViewDataSource,UITableViewDelegate>
    
    {
        NSString *expressCode;//快递公司的编号
        NSString *expressNumber;//快递的单号
        
        NSMutableArray *timeArr;// 时间
        NSMutableArray *messsgeArr; // 物流信息
        UITableView * _tableView;
    }
    @end
    
    @implementation RootViewController
    
    - (void)viewDidLoad {
        [super viewDidLoad];
        
        timeArr = [[NSMutableArray alloc] init];
        messsgeArr = [[NSMutableArray alloc] init];
        
        _tableView = [[UITableView alloc] initWithFrame:CGRectMake(0, 20, cellWidth, [UIScreen mainScreen].bounds.size.height - 20) style:UITableViewStylePlain];
        _tableView.delegate = self;
        _tableView.dataSource = self;
        _tableView.backgroundColor = [UIColor lightGrayColor];
        [self.view addSubview:_tableView];
        //去掉多余的cell
        _tableView.tableFooterView = [[UIView alloc] init];
        
        expressCode = @"shentong";
        expressNumber = @"227132715137";
        // 获取快递信息的相关链接
        NSString *path = [[NSString alloc] initWithFormat:@"http://www.kuaidi100.com/query?type=%@&postid=%@&id=1&valicode=&temp=0.42161923577077687",expressCode,expressNumber];
        //处理快递的信息
        [self dealWithExpressMessage:path];
      
    }
    /**
     *  处理快递的信息
     *
     *  @param htmlString 获取快递信息的相关链接
     */
    - (void)dealWithExpressMessage:(NSString*)htmlString{
        // GCD开启线程加载数据
        dispatch_queue_t queue = dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT, 0);
        //异步记载
        dispatch_async(queue, ^{
            NSString *dataString = [NSString stringWithContentsOfURL:[NSURL URLWithString:htmlString] encoding:NSUTF8StringEncoding error:nil];
            NSData *htmlData = [dataString dataUsingEncoding:NSUTF8StringEncoding];
            //将二进制转化为字典
            NSDictionary *dic = [NSJSONSerialization JSONObjectWithData:htmlData options:0 error:nil];
            //判断快递的信息是否正确
            NSString *isOk = dic[@"message"];
            if ([isOk isEqualToString:@"ok"]) {
                // 获取相关信息
                NSArray *arr = dic[@"data"];
                for (NSDictionary *infoDic in arr) {
                    NSString *time = infoDic[@"time"];
                    NSString *context = infoDic[@"context"];
                    [timeArr addObject:time];
                    [messsgeArr addObject:context];
                }
                //返回主线程刷新UI
                dispatch_async(dispatch_get_main_queue(), ^{
                    [_tableView reloadData];
                });
            }
        });
    }
    
    #pragma mark -- tableView 的数据配置 --
    - (NSInteger)numberOfSectionsInTableView:(UITableView *)tableView{
        return 1;
    }
    - (NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section{
        return timeArr.count;
    }
    
    - (CGFloat)tableView:(UITableView *)tableView heightForRowAtIndexPath:(NSIndexPath *)indexPath
    {
        UITableViewCell *cell = [self tableView:tableView cellForRowAtIndexPath:indexPath];
        return cell.frame.size.height;
    }
    
    - (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath{
        
        
        static NSString *identifier = @"cell";
        tableView.separatorStyle = UITableViewCellSelectionStyleNone;
        UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:identifier];
        if (cell == nil) {
            cell = [[UITableViewCell alloc] initWithStyle:UITableViewCellStyleDefault reuseIdentifier:identifier];
        }
        cell.userInteractionEnabled = NO;
        for (UIView *subView in cell.subviews) {
            [subView removeFromSuperview];
        }
        cell.backgroundColor = [UIColor lightGrayColor];
        UILabel *timeLabel = [[UILabel alloc] initWithFrame:CGRectMake(5, 0, cellWidth, 20)];
        timeLabel.textColor = [UIColor blueColor];
        timeLabel.font = [UIFont systemFontOfSize:14];
        timeLabel.backgroundColor = [UIColor clearColor];
        [cell addSubview:timeLabel];
        timeLabel.text = timeArr[indexPath.row];
        
        UILabel *messageLabel = [[UILabel alloc] init];
        [cell addSubview:messageLabel];
        messageLabel.text = messsgeArr[indexPath.row];
        
        messageLabel.numberOfLines = 0;
        messageLabel.backgroundColor = [UIColor clearColor];
        messageLabel.textColor = [UIColor blackColor];
        UIFont *font = [UIFont fontWithName:@"Arial" size:16];
        messageLabel.font = font;
        CGSize constraint = CGSizeMake(cellWidth - 10, 20000);
        CGSize size = [messageLabel.text sizeWithFont:font constrainedToSize:constraint lineBreakMode:UILineBreakModeWordWrap];
        //    CGSize labelSize = [messageLabel.text boundingRectWithSize:boundSize options:NSStringDrawingUsesFontLeading attributes:@{NSFontAttributeName:[UIFont systemFontOfSize:16]} context:nil].size;
        messageLabel.frame = CGRectMake(5, 20, size.width,size.height);
        CGRect rect = cell.frame;
        rect.size.height = timeLabel.frame.size.height + messageLabel.frame.size.height + 20;
        cell.frame = rect;
        
        return cell;
    }
    
    @end

                             

  • 相关阅读:
    反转链表 16
    CodeForces 701A Cards
    hdu 1087 Super Jumping! Jumping! Jumping!(动态规划)
    hdu 1241 Oil Deposits(水一发,自我的DFS)
    CodeForces 703B(容斥定理)
    poj 1067 取石子游戏(威佐夫博奕(Wythoff Game))
    ACM 马拦过河卒(动态规划)
    hdu 1005 Number Sequence
    51nod 1170 1770 数数字(数学技巧)
    hdu 2160 母猪的故事(睡前随机水一发)(斐波那契数列)
  • 原文地址:https://www.cnblogs.com/lantu1989/p/5045092.html
Copyright © 2011-2022 走看看