显示天气预报的Demo
实现的效果如下所示:
代码如下:
ViewController.h
#import <UIKit/UIKit.h>
@interface ViewController : UIViewController
@property (weak, nonatomic) IBOutlet UIPickerView *cityPickView;
- (IBAction)request:(id)sender;
@property (weak, nonatomic) IBOutlet UILabel *city;
@property (weak, nonatomic) IBOutlet UILabel *temperature;
@property (weak, nonatomic) IBOutlet UILabel *windyDirection;
@property (weak, nonatomic) IBOutlet UILabel *level;
@property (weak, nonatomic) IBOutlet UILabel *moisture;
@property (weak, nonatomic) IBOutlet UILabel *time;
@end
ViewController.m
#import "ViewController.h"
@interface ViewController ()
@property (nonatomic,strong)NSDictionary *dic;
@property (weak, nonatomic) IBOutlet UIView *activityView;
//@property (nonatomic,strong)UIActivityIndicatorView *activity;
//存放所有的城市名字
@property (nonatomic,strong)NSMutableArray *data;
@end
@implementation ViewController
- (void)viewDidLoad {
[super viewDidLoad];
//先隐藏
_activityView.hidden = YES;
}
//懒加载
- (NSDictionary *)dic
{
if (_dic == nil) {
NSString *path = [[NSBundle mainBundle]pathForResource:@"cityCode.plist" ofType:nil];
_dic = [NSDictionary dictionaryWithContentsOfFile:path];
}
return _dic;
}
- (NSMutableArray *)data
{
if (_data == nil) {
_data = [NSMutableArray array];
}
return _data;
}
//列数
- (NSInteger)numberOfComponentsInPickerView:(UIPickerView *)pickerView
{
return 1;
}
//每列的行数
- (NSInteger)pickerView:(UIPickerView *)pickerView numberOfRowsInComponent:(NSInteger)component
{
return self.dic.count;
}
//显示标题
- (NSString *)pickerView:(UIPickerView *)pickerView titleForRow:(NSInteger)row forComponent:(NSInteger)component
{
//取得所有的key
NSArray *cities = [_dic allKeys];
//_data保存所有的城市
_data = [cities copy];
//取得城市的名字
NSString *cityName = cities[row];
return cityName;
}
//当前选中的行数
- (void)pickerView:(UIPickerView *)pickerView didSelectRow:(NSInteger)row inComponent:(NSInteger)component
{
NSLog(@"row = %ld",row);
}
//请求网络数据
- (IBAction)request:(id)sender {
_activityView.hidden = NO;
//得到_cityPickView当前选中的行数
NSInteger rowIndex = [_cityPickView selectedRowInComponent:0];
//得到 选中行的城市名字
NSString *city = _data[rowIndex];
//取得城市对应的ID
NSString *cityId = _dic[city];
//构造URL对象
NSString *str = [NSString stringWithFormat:@"http://www.weather.com.cn/adat/sk/%@.html",cityId];
NSURL *url = [NSURL URLWithString:str];
//构造request对象
NSURLRequest *request = [NSURLRequest requestWithURL:url];
//构造NSURLSession
NSURLSession *session= [NSURLSession sharedSession];
//创建网络任务
NSURLSessionDataTask *task = [session dataTaskWithRequest:request completionHandler:^(NSData *data, NSURLResponse *response, NSError *error) {
//解析JSON数据
NSDictionary *dic1 = [NSJSONSerialization JSONObjectWithData:data options:NSJSONReadingMutableContainers error:nil];
//回到主线程 刷新UI
dispatch_async(dispatch_get_main_queue(), ^{
[self refreshUI:dic1];
});
}];
//发起网络任务
[task resume];
}
//刷新UI
- (void)refreshUI:(NSDictionary *)dic
{
_activityView.hidden = YES;
//取得数据
NSDictionary *dic2 = dic[@"weatherinfo"];
NSString *ws = dic2[@"WS"]; //风级
NSString *city = dic2[@"city"]; //城市
NSString *temp = dic2[@"temp"]; //温度
NSString *SD = dic2[@"SD"]; //湿度
NSString *Wd = dic2[@"WD"]; //风向
NSString *time = dic2[@"time"]; //时间
_city.text = city;
_temperature.text = temp;
_windyDirection.text = Wd;
_level.text = ws;
_moisture.text = SD;
_time.text = time;
}
在以后的学习中,会一直坚持写博客,记录自己的学习笔记,为自己的学习和工作做好准备!!!
显示天气预报的Demo的更多相关文章
- libcurl开源库在Win7 + VS2012环境下编译、配置详解 以及下载文件并显示下载进度 demo(转载)
转载:http://blog.csdn.net/fengshuiyue/article/details/39530093(基本教程) 转载:https://my.oschina.net/u/14207 ...
- springboot1.5.9整合websocket实现实时显示的小demo
最近由于项目需要实时显示数据库更新的数据变化情况,一开始想过在前端使用ajax异步轮询方法实现,但后面考虑到性能和流量等要求,就放弃该方法而选择使用websocket(毕竟现在springboot整合 ...
- Android 拍照或相册选择照片进行显示缩放位图 Demo
拍照后直接使用 BitmapFactory.decodeStream(...) 进行创建 Bitmap 并显示是有问题的. Bitmap 是个简单对象,它只存储实际像素数据,也就是说,即使原始照片已压 ...
- 显示本月日历demo
import java.text.DateFormatSymbols; import java.util.Calendar; import java.util.GregorianCalendar; p ...
- 关于一个隐藏和显示物品列表的demo
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01//EN" "http://www.w3.org/TR/html4/stri ...
- Android 获取天气预报
界面布局 <?xml version="1.0" encoding="utf-8"?> <LinearLayout xmlns:android ...
- 在android中用跑马灯的效果显示textview
大家好,在我们通常的android project中,通常需要用到textview这一个布局文件,并且对于这一个显示布局所需要的文本文字内容. 下面我们就来介绍一种方法来实现在android中用跑马灯 ...
- CSS2-3常见的demo列子总结
CSS2-3常见的demo列子总结 阅读目录 1. css超过一行或者多行后显示省略号. 2. css图片未知高度垂直居中完美解决方案. 3. 学习使用 :before和 :after伪元素 回到顶部 ...
- 【AS3 Coder】任务七:初涉PureMVC——天气预报功能实现
转自:http://www.iamsevent.com/post/36.html AS3 Coder]任务七:初涉PureMVC——天气预报功能实现 使用框架:AS3任务描述:了解PureMVC框架使 ...
随机推荐
- iOS--KVO的实现原理与具体应用
本文分为2个部分:概念与应用. 概念部分旨在剖析KVO这一设计模式的实现原理,应用部分通过创建的项目,以说明KVO技术在iOS开发中所带来的作用: 如果是作为是刚接触KVO的初学者,可以在了解基本原理 ...
- SBCL 从REPL 中提取lisp代码
1, 在emacs C-x C-W 文件另存为保存所有REPL过程 由于 (load "foo.lisp")时只有定义语句可以正确执行, 执行语句不可正确被 (load " ...
- web开发过程中经常用到的一些公共方法及操作
进化成为程序猿也有段岁月了,所谓的经验,广度还是依旧,只不过是对于某种功能有了多种实现方式的想法.每天依旧不厌其烦的敲打着代码,每一行代码的回车似乎都有一种似曾相识的感觉.于是乎:粘贴复制,再粘贴再复 ...
- 【多线程 5】线程池的类型以及submit()和execute()的区别
就跟题目说的一样,本篇博客,本宝宝主要介绍两个方面的内容,其一:线程池的类型及其应用场景:其二:submit和execute的区别.那么需要再次重申的是,对于概念性的东西,我一般都是从网上挑选截取,再 ...
- your PC ran into a problem and needs to restart system_thrread_exception_not_handled
- cs11_c++_lab5待修改
heap.hh #ifndef HEAP_HH #define HEAP_HH #include <iostream> #include <stdexcept> #includ ...
- Ngnix反向代理react-router配置问题解决方法
项目以react router实现,用ngnix做反向代理的时候出现404找不到页面,有两种解决方法. 第一种 将<Route path="*" component={No ...
- Win8.1无法安装.NET Framework 3.5的解决办法
这个问题纠结了我很多天,恢复系统也没用,差点儿就重装Win8,现在终于解决了,你也来试试吧! 机型:台电X89 系统:Win8.1 with bing 故障:在未安装.NET Framework 3. ...
- HTTP权威协议笔记-4.连接管理
4.1 TCP连接 TCP为HTTP提供了一条可靠的比特传输管道,按顺序正确的传输,步骤如下: 浏览器解析主机名. 查询这个主机名的IP地址(DNS) 获得端口号. 浏览器对服务器该端口号发起连接. ...
- XidianOJ 1149 卡尔的技能 II
--正文 多重集合数 + 组合数取模 首先求出没有限制的选择方法C(n+m-1,m) 然后减掉至少有一个元素选择了k+1次的方法数,加上至少有两个元素选择了k+1次的方法数...以此类推 然后是组合数 ...