iOS使用UITableView从plist中选择省市区

来源:互联网 发布:红帽linux是什么 编辑:程序博客网 时间:2024/05/22 13:35

最近在做一个天气应用,需要用户选择所在城市。考虑到城市信息一般不会发生大的变化,所以从网上找到了中国城市信息的xml文件,下面是利用一个tableview实现地区选择的代码,比较简单,就不解释了。
AddressViewController.h文件

////  AddressViewController.h//  AddressDemo////  Created by worthy.zhang on 15/5/29.//  Copyright (c) 2015年 worthy.zhang. All rights reserved.//#import <UIKit/UIKit.h>#define kDisplayProvince 0#define kDisplayCity 1#define kDisplayArea 2@interface AddressViewController : UIViewController<UITableViewDelegate,UITableViewDataSource>@property(nonatomic,strong)UITableView *tableView;@property(nonatomic,assign)int displayType;@property(nonatomic,strong)NSArray *provinces;@property(nonatomic,strong)NSArray *citys;@property(nonatomic,strong)NSArray *areas;@property(nonatomic,strong)NSString *selectedProvince;//选中的省@property(nonatomic,strong)NSString *selectedCity;//选中的市@property(nonatomic,strong)NSString *selectedArea;//选中的区@end

AddressViewController.m文件

////  AddressViewController.m//  AddressDemo////  Created by worthy.zhang on 15/5/29.//  Copyright (c) 2015年 worthy.zhang. All rights reserved.//#import "AddressViewController.h"@interface AddressViewController ()@property(nonatomic,strong)NSIndexPath *selectedIndexPath;//当前选中的NSIndexPath@end@implementation AddressViewController-(void)viewDidLoad{    [self configureData];    [self configureViews];}-(void)configureData{    if (self.displayType == kDisplayProvince) {        //从文件读取地址字典        NSString *addressPath = [[NSBundle mainBundle] pathForResource:@"address" ofType:@"plist"];        NSMutableDictionary *dict = [[NSMutableDictionary alloc]initWithContentsOfFile:addressPath];        self.provinces = [dict objectForKey:@"address"];    }}-(void)configureViews{    if (self.displayType == kDisplayProvince) { //只在选择省份页面显示取消按钮        self.navigationItem.leftBarButtonItem = [[UIBarButtonItem alloc]initWithTitle:@"取消" style:UIBarButtonItemStylePlain target:self action:@selector(cancel)];    }    if (self.displayType == kDisplayArea) {//只在选择区域页面显示确定按钮        self.navigationItem.rightBarButtonItem = [[UIBarButtonItem alloc]initWithTitle:@"确定" style:UIBarButtonItemStylePlain target:self action:@selector(submit)];    }    CGRect frame = [self.view bounds];    self.tableView = [[UITableView alloc]initWithFrame:frame];    self.tableView.delegate = self;    self.tableView.dataSource = self;    [self.view addSubview:self.tableView];}-(NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section{    if (self.displayType == kDisplayProvince) {        return self.provinces.count;    }else if (self.displayType == kDisplayCity){        return self.citys.count;    }else{        return self.areas.count;    }}-(UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath{    static NSString* ID = @"cityCell";    UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:ID];    if (!cell) {        cell = [[UITableViewCell alloc]initWithStyle:UITableViewCellStyleDefault reuseIdentifier:ID];        if (self.displayType == kDisplayArea) {            cell.accessoryType = UITableViewCellAccessoryNone;        }else{            cell.accessoryType = UITableViewCellAccessoryDisclosureIndicator;        }    }    if (self.displayType == kDisplayProvince) {        NSDictionary *province = self.provinces[indexPath.row];        NSString *provinceName = [province objectForKey:@"name"];        cell.textLabel.text= provinceName;    }else if (self.displayType == kDisplayCity){        NSDictionary *city = self.citys[indexPath.row];        NSString *cityName = [city objectForKey:@"name"];        cell.textLabel.text= cityName;    }else{        cell.textLabel.text= self.areas[indexPath.row];        cell.imageView.image = [UIImage imageNamed:@"unchecked"];    }    return cell;}-(void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath{    if (self.displayType == kDisplayProvince) {        NSDictionary *province = self.provinces[indexPath.row];        NSArray *citys = [province objectForKey:@"sub"];        self.selectedProvince = [province objectForKey:@"name"];        //构建下一级视图控制器        AddressViewController *cityVC = [[AddressViewController alloc]init];        cityVC.displayType = kDisplayCity;//显示模式为城市        cityVC.citys = citys;        cityVC.selectedProvince = self.selectedProvince;        [self.navigationController pushViewController:cityVC animated:YES];    }else if (self.displayType == kDisplayCity){        NSDictionary *city = self.citys[indexPath.row];        self.selectedCity = [city objectForKey:@"name"];        NSArray *areas = [city objectForKey:@"sub"];        //构建下一级视图控制器        AddressViewController *areaVC = [[AddressViewController alloc]init];        areaVC.displayType = kDisplayArea;//显示模式为区域        areaVC.areas = areas;        areaVC.selectedCity = self.selectedCity;        areaVC.selectedProvince = self.selectedProvince;        [self.navigationController pushViewController:areaVC animated:YES];    }    else{        //取消上一次选定状态        UITableViewCell *oldCell =  [tableView cellForRowAtIndexPath:self.selectedIndexPath];        oldCell.imageView.image = [UIImage imageNamed:@"unchecked"];        //勾选当前选定状态        UITableViewCell *newCell =  [tableView cellForRowAtIndexPath:indexPath];        newCell.imageView.image = [UIImage imageNamed:@"checked"];        //保存        self.selectedArea = self.areas[indexPath.row];        self.selectedIndexPath = indexPath;    }}-(void)submit{    NSString *msg = [NSString stringWithFormat:@"%@-%@-%@",self.selectedProvince,self.selectedCity,self.selectedArea];    UIAlertView *alert = [[UIAlertView alloc]initWithTitle:@"选择地址" message:msg delegate:nil cancelButtonTitle:@"取消" otherButtonTitles:nil, nil];    [alert show];}-(void)cancel{    [self dismissViewControllerAnimated:YES completion:nil];}@end

效果图如下:
这里写图片描述
这里写图片描述
Demo地址:
https://github.com/WorthyZhang/AddressDemo
省市区plist数据下载地址:
http://download.csdn.net/detail/worthyzhang/8751317

0 0
原创粉丝点击