UIPickerView是一個(gè)選擇器它可以生成單列的選擇器,也可生成多列的選擇器,而且開發(fā)者完全可以自定義選擇項(xiàng)的外觀,因此用法非常靈活,使用也比較簡單.下面做了一個(gè)關(guān)于天氣預(yù)報(bào)的小Demo 用 UIPickerView 來實(shí)現(xiàn).
@property (strong, nonatomic) NSDictionary *dataDic;
@property (strong, nonatomic) NSArray *cityArr;
@end
@implementation ViewController
- (void)viewDidLoad {
[super viewDidLoad];
_grayView.hidden = YES;
// 1.初始化 pickerView
[self loadPickerView];
// 2.加載網(wǎng)絡(luò)數(shù)據(jù)
[self loadDataWithRow:0];
}
- (void)loadPickerView
{
// 讀取本地plist文件
NSString *filePath = [[NSBundle mainBundle] pathForResource:@"cityCode.plist" ofType:nil];
_dataDic = [[NSDictionary alloc] initWithContentsOfFile:filePath];
// 拿到 key <城市>
_cityArr = [_dataDic allKeys];
}
- (void)loadDataWithRow:(NSInteger)row
{
_grayView.hidden = NO;
// 1.獲取當(dāng)前的城市下標(biāo)
// NSInteger selectRow = [_pickerView selectedRowInComponent:0];
// 2.通過下標(biāo)獲取城市
NSString *city = _cityArr[row];
// 3.獲取當(dāng)前城市的ID
NSString *cityID = _dataDic[city];
// 4.通過城市ID加載數(shù)據(jù)
NSString *httpURL = [NSString stringWithFormat:@"data/sk/%@.html", cityID];
[DataService requestsDataWithURL:httpURL withBlock:^(id result) {
[self performSelector:@selector(showGrayView:) withObject:result afterDelay:.2];
}];
}
// 無敵風(fēng)火輪動(dòng)畫
- (void)showGrayView:(id)result
{
// _grayView.hidden = NO;
// [_activiteView startAnimating];
[self performSelector:@selector(refreshUIWithDic:) withObject:result afterDelay:2];
}
//刷新UI
- (void)refreshUIWithDic:(NSDictionary *)dic {
_grayView.hidden = YES;
//取得weatherinfo的value
NSDictionary *infoDic = dic[@"weatherinfo"];
//取得城市信息
_city.text = infoDic[@"city"];
//取得城市溫度
_temperature.text = infoDic[@"temp"];
//取得城市的風(fēng)向
_wind.text = infoDic[@"WD"];
//取得城市的風(fēng)級(jí)
_windScale.text = infoDic[@"WS"];
//取得城市的濕度
_humidity.text = infoDic[@"SD"];
//取得城市的時(shí)間
_time.text = infoDic[@"time"];
}
#pragma mark - UIPickerViewDataSource
- (NSInteger)numberOfComponentsInPickerView:(UIPickerView *)pickerView
{
return 1; // 多少列
}
- (NSInteger)pickerView:(UIPickerView *)pickerView numberOfRowsInComponent:(NSInteger)component
{
return _cityArr.count; // 每一列多少行
}
#pragma mark - UIPickerViewDelegate
- (NSString *)pickerView:(UIPickerView *)pickerView titleForRow:(NSInteger)row forComponent:(NSInteger)component
{
// 設(shè)置沒一行顯示的數(shù)據(jù)
return _cityArr[row];
}
- (void)pickerView:(UIPickerView *)pickerView didSelectRow:(NSInteger)row inComponent:(NSInteger)component
{
// 刷新
[self loadDataWithRow:row];
}
數(shù)據(jù)解析:
#define FIRSTURL @"http://www.weather.com.cn/"
@implementation HCDataService
+ (void)requestsDataWithURL:(NSString *)urlString withBlock:(DataBlock)block
{
// 1.創(chuàng)建URL
NSString *string = [NSString stringWithFormat:@"%@%@", FIRSTURL, urlString];
NSURL *url = [NSURL URLWithString:string];
// 2.創(chuàng)建request
NSMutableURLRequest *request = [[NSMutableURLRequest alloc] initWithURL:url];
// 設(shè)置請(qǐng)求方式
[request setHTTPMethod:@"GET"];
// 設(shè)置超時(shí)時(shí)間
request.timeoutInterval = 10;
// 3.創(chuàng)建會(huì)話對(duì)象session
NSURLSession *session = [NSURLSession sharedSession];
// 4.創(chuàng)建會(huì)話任務(wù)task,鏈接服務(wù)器
NSURLSessionDataTask *task = [session dataTaskWithRequest:request completionHandler:^(NSData *data, NSURLResponse *response, NSError *error) {
if (error == nil) {
dispatch_async(dispatch_get_main_queue(), ^{
id result = [NSJSONSerialization JSONObjectWithData:data options:NSJSONReadingMutableContainers error:nil];
block(result);
});
//取得響應(yīng)體
// NSString *text = [[NSString alloc] initWithData:data encoding:NSUTF8StringEncoding];
// NSLog(@"%@", text);
//取得響應(yīng)頭
// NSHTTPURLResponse *urlResponse = (NSHTTPURLResponse *)response;
// NSDictionary *dic = urlResponse.allHeaderFields;
// NSLog(@"dic:%@",dic);
}
}];
// 開始任務(wù)
[task resume];
}
@end
滑動(dòng)了UIPickView后,數(shù)據(jù)會(huì)即時(shí)刷新,顯示天氣情況。

123.gif