你好,歡迎來到IOS教程網

 Ios教程網 >> IOS編程開發 >> IOS開發綜合 >> iOS使用UITableView從plist中選擇省市區

iOS使用UITableView從plist中選擇省市區

編輯:IOS開發綜合

最近在做一個天氣應用,需要用戶選擇所在城市。考慮到城市信息一般不會發生大的變化,所以從網上找到了中國城市信息的xml文件,下面是利用一個tableview實現地區選擇的代碼,比較簡單,就不解釋了。
AddressViewController.h文件

//
//  AddressViewController.h
//  AddressDemo
//
//  Created by worthy.zhang on 15/5/29.
//  Copyright (c) 2015年 worthy.zhang. All rights reserved.
//

#import 
#define kDisplayProvince 0
#define kDisplayCity 1
#define kDisplayArea 2
@interface AddressViewController : UIViewController
@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

效果圖如下:
這裡寫圖片描述
這裡寫圖片描述
 

  1. 上一頁:
  2. 下一頁:
蘋果刷機越獄教程| IOS教程問題解答| IOS技巧綜合| IOS7技巧| IOS8教程
Copyright © Ios教程網 All Rights Reserved