iOS解析XML实现省市区选择

本文涉及的产品
全局流量管理 GTM,标准版 1个月
云解析 DNS,旗舰版 1个月
公共DNS(含HTTPDNS解析),每月1000万次HTTP解析
简介:

1、具体内容就不再赘述了。直接看关键代码。

viewController.h

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
//
//  ViewController.h
//  ParseXmlToRealizeChooseCityDemo
//
//  Created by zhanggui on 15/7/25.
//  Copyright (c) 2015年 zhanggui. All rights reserved.
//
 
#import <UIKit/UIKit.h>
 
@interface  ViewController : UIViewController<UIPickerViewDataSource,UIPickerViewDelegate, NSXMLParserDelegate >
 
- ( IBAction )getAction:(UIButton *)sender;
 
@property  (weak,  nonatomic IBOutlet  UIPickerView *pickerView;
@end

  viewController.m

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
//
//  ViewController.m
//  ParseXmlToRealizeChooseCityDemo
//
//  Created by zhanggui on 15/7/25.
//  Copyright (c) 2015年 zhanggui. All rights reserved.
//
 
#import "ViewController.h"
 
@interface  ViewController ()
{
     NSMutableDictionary  *province,*city;
     NSMutableArray  *provinceArr,*cityArr,*areaArr;
     NSString  *tempProvince,*tempCity,*tempArea;
 
     NSArray  *finalProvinceArr,*finalCityArr,*finalAreaArr;
     
     
     NSString  *seletedStr;
}
 
 
 
@end
@implementation  ViewController
- ( void )viewDidLoad {
     [ super  viewDidLoad];
     
    
     NSString  *xmlFilePath = [[ NSBundle  mainBundle]pathForResource:@ "province_data"  ofType:@ "xml" ];
     NSData  *data = [ NSData  dataWithContentsOfFile:xmlFilePath];
     NSXMLParser  *xmlParser = [[ NSXMLParser  alloc]initWithData:data];
     xmlParser.delegate =  self ;
     province = [ NSMutableDictionary  new ];
     city = [ NSMutableDictionary  new ];
     provinceArr = [ NSMutableArray  new ];
     cityArr = [ NSMutableArray  new ];
     [xmlParser parse];
   
     
     finalProvinceArr = [province allKeys];
     
     NSDictionary  *tempCityDic = [province objectForKey:[finalProvinceArr objectAtIndex:0]];
     finalCityArr = [tempCityDic allKeys];
     
 
     finalAreaArr = [tempCityDic objectForKey:[finalCityArr objectAtIndex:0]];
}
#pragma mark - xmlParseDelegateMethod
-( void )parser:( NSXMLParser  *)parser didStartElement:( NSString  *)elementName namespaceURI:( NSString  *)namespaceURI qualifiedName:( NSString  *)qName attributes:( NSDictionary  *)attributeDict {
     if  ([elementName isEqualToString:@ "province" ]) {
         tempProvince = [attributeDict objectForKey:@ "name" ];
     }
     if  ([elementName isEqualToString:@ "city" ]) {
         tempCity = [attributeDict objectForKey:@ "name" ];
         areaArr = [ NSMutableArray  new ];
     } else  if  ([elementName isEqualToString:@ "district" ]) {
         [areaArr addObject:[attributeDict objectForKey:@ "name" ]];
     }
  }
-( void )parser:( NSXMLParser  *)parser didEndElement:( NSString  *)elementName namespaceURI:( NSString  *)namespaceURI qualifiedName:( NSString  *)qName {
     if  ([elementName isEqualToString:@ "city" ]) {
         NSMutableArray  *temp =[[ NSMutableArray  alloc] initWithArray:areaArr] ;
         [city setValue:temp forKey:tempCity];
         [areaArr removeAllObjects];
     } else  if  ([elementName isEqualToString:@ "province" ]) {
         NSDictionary  *tempDic = [[ NSDictionary  alloc] initWithDictionary:city];
         [province setValue:tempDic forKey:tempProvince];
         [city removeAllObjects];
     
     }
}
 
 
#pragma mark - UIPickerViewDeletate
-( NSInteger )numberOfComponentsInPickerView:(UIPickerView *)pickerView {
     return  3;
}
-( NSInteger )pickerView:(UIPickerView *)pickerView numberOfRowsInComponent:( NSInteger )component {
     if (component==0) {
         return  [finalProvinceArr count];
     } else  if  (component==1) {
         return  [finalCityArr count];
     } else  {
         return  [finalAreaArr count];
     }
}
 
-( NSString  *)pickerView:(UIPickerView *)pickerView titleForRow:( NSInteger )row forComponent:( NSInteger )component {
     if  (component==0) {
         return  finalProvinceArr[row];
     } else  if  (component==1) {
         return  finalCityArr[row];
     } else
     {
         return  finalAreaArr[row];
     }
}
-( void )pickerView:(UIPickerView *)pickerView didSelectRow:( NSInteger )row inComponent:( NSInteger )component {
     if  (component==0) {
         finalCityArr =[[province objectForKey:[finalProvinceArr objectAtIndex:row]] allKeys];
         [pickerView selectRow:0 inComponent:1 animated: NO ];
         [pickerView reloadComponent:1];
         
         if  ([finalCityArr count]!=0) {
              NSString  *selectedProvince = [ self  pickerView:pickerView titleForRow:[pickerView selectedRowInComponent:0] forComponent:0];
              NSString  *selectedCity = [ self  pickerView:pickerView titleForRow:[pickerView selectedRowInComponent:1] forComponent:1];
             finalAreaArr = [[province objectForKey:selectedProvince] objectForKey:selectedCity];
             [pickerView selectRow:0 inComponent:2 animated: NO ];
             [pickerView reloadComponent:2];
         }
     } else  if  (component==1) {
         NSString  *selectedProvince = [ self  pickerView:pickerView titleForRow:[pickerView selectedRowInComponent:0] forComponent:0];
         NSString  *selectedCity = [ self  pickerView:pickerView titleForRow:[pickerView selectedRowInComponent:1] forComponent:1];
         finalAreaArr = [[province objectForKey:selectedProvince] objectForKey:selectedCity] ;
         [pickerView selectRow:0 inComponent:2 animated: NO ];
         [pickerView reloadComponent:2];
//        finalAreaArr = [province objectForKey:[province objectForKey:<#(id)#>]];
     }
     NSString  *pro =[ self  pickerView:pickerView titleForRow:[pickerView selectedRowInComponent:0] forComponent:0];
     NSString  *cit =[ self  pickerView:pickerView titleForRow:[pickerView selectedRowInComponent:1] forComponent:1];
     NSString  *are = [ self  pickerView:pickerView titleForRow:[pickerView selectedRowInComponent:2] forComponent:2];
     seletedStr =[ NSString  stringWithFormat:@ "%@%@%@" ,pro,cit,are];
}
#pragma mark - UIButton Method
- ( IBAction )getAction:(UIButton *)sender {
     UIAlertView *aler = [[UIAlertView alloc] initWithTitle:@ "选中结果"  message:seletedStr delegate: self  cancelButtonTitle:@ "确定"  otherButtonTitles:  nil ];
     [aler show];
}
@end

2、province_data.xml文件下载地址:http://pan.baidu.com/s/1c0Cr9ja

3、源码下载地址:https://github.com/ScottZg/GetProvinceCityAreaByXMLFile

4、有什么疑问欢迎评论提问。

相关文章
|
2月前
|
Java 开发工具 Android开发
Android与iOS开发环境搭建全解析####
本文深入探讨了Android与iOS两大移动操作系统的开发环境搭建流程,旨在为初学者及有一定基础的开发者提供详尽指南。我们将从开发工具的选择、环境配置到第一个简单应用的创建,一步步引导读者步入移动应用开发的殿堂。无论你是Android Studio的新手还是Xcode的探索者,本文都将为你扫清开发道路上的障碍,助你快速上手并享受跨平台移动开发的乐趣。 ####
|
1月前
|
存储 安全 数据安全/隐私保护
深入解析iOS 14隐私保护功能:用户数据安全的新里程碑
随着数字时代的到来,个人隐私保护成为全球关注的焦点。苹果公司在最新的iOS 14系统中引入了一系列创新的隐私保护功能,旨在为用户提供更透明的数据使用信息和更强的控制权。本文将深入探讨iOS 14中的几项关键隐私功能,包括App跟踪透明性、简化的隐私设置以及增强的系统安全性,分析它们如何共同作用以提升用户的隐私保护水平。
143 3
|
1月前
|
Java 调度 Android开发
安卓与iOS开发中的线程管理差异解析
在移动应用开发的广阔天地中,安卓和iOS两大平台各自拥有独特的魅力。如同东西方文化的差异,它们在处理多线程任务时也展现出不同的哲学。本文将带你穿梭于这两个平台之间,比较它们在线程管理上的核心理念、实现方式及性能考量,助你成为跨平台的编程高手。
|
2月前
|
数据安全/隐私保护 iOS开发 开发者
iOS 14隐私保护新特性深度解析####
随着数字时代的到来,隐私保护已成为全球用户最为关注的问题之一。苹果在最新的iOS 14系统中引入了一系列创新功能,旨在增强用户的隐私和数据安全。本文将深入探讨iOS 14中的几大隐私保护新特性,包括App跟踪透明度、剪贴板访问通知和智能防追踪功能,分析这些功能如何提升用户隐私保护,并评估它们对开发者和用户体验的影响。 ####
|
2月前
|
开发框架 Dart Android开发
安卓与iOS的跨平台开发:Flutter框架深度解析
在移动应用开发的海洋中,Flutter作为一艘灵活的帆船,正引领着开发者们驶向跨平台开发的新纪元。本文将揭开Flutter神秘的面纱,从其架构到核心特性,再到实际应用案例,我们将一同探索这个由谷歌打造的开源UI工具包如何让安卓与iOS应用开发变得更加高效而统一。你将看到,借助Flutter,打造精美、高性能的应用不再是难题,而是变成了一场创造性的旅程。
|
13天前
|
iOS开发 开发者
uniapp开发ios打包Error code = -5000 Error message: Error: certificate file(p12) import failed!报错问题如何解决
uniapp开发ios打包Error code = -5000 Error message: Error: certificate file(p12) import failed!报错问题如何解决
107 67
uniapp开发ios打包Error code = -5000 Error message: Error: certificate file(p12) import failed!报错问题如何解决
|
2月前
|
开发框架 前端开发 Android开发
安卓与iOS开发中的跨平台策略
在移动应用开发的战场上,安卓和iOS两大阵营各据一方。随着技术的演进,跨平台开发框架成为开发者的新宠,旨在实现一次编码、多平台部署的梦想。本文将探讨跨平台开发的优势与挑战,并分享实用的开发技巧,帮助开发者在安卓和iOS的世界中游刃有余。
|
1月前
|
iOS开发 开发者 MacOS
深入探索iOS开发中的SwiftUI框架
【10月更文挑战第21天】 本文将带领读者深入了解Apple最新推出的SwiftUI框架,这一革命性的用户界面构建工具为iOS开发者提供了一种声明式、高效且直观的方式来创建复杂的用户界面。通过分析SwiftUI的核心概念、主要特性以及在实际项目中的应用示例,我们将展示如何利用SwiftUI简化UI代码,提高开发效率,并保持应用程序的高性能和响应性。无论你是iOS开发的新手还是有经验的开发者,本文都将为你提供宝贵的见解和实用的指导。
127 66
|
23天前
|
存储 监控 API
app开发之安卓Android+苹果ios打包所有权限对应解释列表【长期更新】-以及默认打包自动添加权限列表和简化后的基本打包权限列表以uniapp为例-优雅草央千澈
app开发之安卓Android+苹果ios打包所有权限对应解释列表【长期更新】-以及默认打包自动添加权限列表和简化后的基本打包权限列表以uniapp为例-优雅草央千澈
|
1月前
|
开发框架 Android开发 iOS开发
安卓与iOS开发中的跨平台策略:一次编码,多平台部署
在移动应用开发的广阔天地中,安卓和iOS两大阵营各占一方。随着技术的发展,跨平台开发框架应运而生,它们承诺着“一次编码,到处运行”的便捷。本文将深入探讨跨平台开发的现状、挑战以及未来趋势,同时通过代码示例揭示跨平台工具的实际运用。
152 3

热门文章

最新文章

推荐镜像

更多