您的位置:首页 > 移动开发 > IOS开发

iOS国家城市选择器 读取本地json文件

2014-11-26 16:56 531 查看
最近在做的产品有这么个需求,读取本地json文件中的国家和城市信息,显示到pickerview上,在网上查了一下,发现没有什么合适的可用资源,所以就自己写了一个简单的DEMO。

效果图:



读取本地json的方法如下:

+ (NSMutableArray *)getCityData
{
NSArray *jsonArray = [[NSArray alloc]init];
NSData *fileData = [[NSData alloc]init];
NSUserDefaults *UD = [NSUserDefaults standardUserDefaults];
if ([UD objectForKey:@"city"] == nil) {
NSString *path;
path = [[NSBundle mainBundle] pathForResource:@"zh_CN" ofType:@"json"];
fileData = [NSData dataWithContentsOfFile:path];

[UD setObject:fileData forKey:@"city"];
[UD synchronize];
}
else {
fileData = [UD objectForKey:@"city"];
}
NSMutableArray *array = [[NSMutableArray alloc]initWithCapacity:0];
jsonArray = [NSJSONSerialization JSONObjectWithData:fileData options:NSJSONReadingMutableLeaves error:nil];
for (NSDictionary *dict in jsonArray) {
[array addObject:dict];
}

return array;
}


citypicker主要代码如下:

//返回显示的列数
- (NSInteger)numberOfComponentsInPickerView:(UIPickerView *)pickerView
{
if (pickerView == self.cityPicker) {
return 3;
}
else
return 1;
}

//返回当前列显示的行数
- (NSInteger)pickerView:(UIPickerView *)pickerView numberOfRowsInComponent:(NSInteger)component{

if (component == 0) {
return [YMUtils getCityData].count;
}
else if (component == 1) {
NSArray *array = [YMUtils getCityData][row1][@"children"];
if ((NSNull*)array != [NSNull null]) {
return array.count;
}
return 0;
}
else {
NSArray *array = [YMUtils getCityData][row1][@"children"];
if ((NSNull*)array != [NSNull null]) {
NSArray *array1 = [YMUtils getCityData][row1][@"children"][row2][@"children"];
if ((NSNull*)array1 != [NSNull null]) {
return array1.count;
}
return 0;
}
return 0;
}
}
//设置当前行的内容
- (NSString *)pickerView:(UIPickerView *)pickerView titleForRow:(NSInteger)row forComponent:(NSInteger)component{

if(component == 0) {
return [YMUtils getCityData][row][@"name"];
}
else if (component == 1) {
return [YMUtils getCityData][row1][@"children"][row][@"name"];
}
else if (component == 3) {
return [YMUtils getCityData][row1][@"children"][row2][@"children"][row][@"name"];
}
return nil;

}
//选择的行数
- (void)pickerView:(UIPickerView *)pickerView didSelectRow:(NSInteger)row inComponent:(NSInteger)component {
if (component == 0) {
row1 = row;
row2 = 0;
row3 = 0;
[self.cityPicker reloadComponent:1];
[self.cityPicker reloadComponent:2];

}
else if (component == 1){
row2 = row;
row3 = 0;
[self.cityPicker reloadComponent:2];

}
else {
row3 = row;
}
NSInteger cityRow1 = [self.cityPicker selectedRowInComponent:0];
NSInteger cityRow2 = [self.cityPicker selectedRowInComponent:1];
NSInteger cityRow3 = [self.cityPicker selectedRowInComponent:2];
NSMutableString *str = [[NSMutableString alloc]init];
[str appendString:[YMUtils getCityData][cityRow1][@"name"]];
NSArray *array = [YMUtils getCityData][cityRow1][@"children"];
if ((NSNull*)array != [NSNull null]) {
[str appendString:[YMUtils getCityData][cityRow1][@"children"][cityRow2][@"name"]];
NSArray *array1 = [YMUtils getCityData][cityRow1][@"children"][cityRow2][@"children"];
if ((NSNull*)array1 != [NSNull null]) {
[str appendString:[YMUtils getCityData][cityRow1][@"children"][cityRow2][@"children"][cityRow3][@"name"]];
}
}
self.cityLabel.text = str;
}
//每行显示的文字样式
- (UIView *)pickerView:(UIPickerView *)pickerView viewForRow:(NSInteger)row forComponent:(NSInteger)component reusingView:(UIView *)view

{

UILabel *titleLabel = [[UILabel alloc] initWithFrame:CGRectMake(0, 0, 107, 30)];
titleLabel.textAlignment = NSTextAlignmentCenter;
titleLabel.font = [UIFont systemFontOfSize:14];
titleLabel.backgroundColor = [UIColor clearColor];
if (component == 0) {
titleLabel.text = [YMUtils getCityData][row][@"name"];
}
else if (component == 1) {
titleLabel.text = [YMUtils getCityData][row1][@"children"][row][@"name"];
}
else {
titleLabel.text = [YMUtils getCityData][row1][@"children"][row2][@"children"][row][@"name"];
}
return titleLabel;

}


DEMO的下载地址:http://download.csdn.net/detail/u011918080/8200985
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: