省份、城市选择组件

组件要求:

  1、能够选择中国的省份、城市

  2、组件具有可扩展性,较好的复用性

效果:

    

具体实施:

  1、类似于照片选择组件,第一个界面显示省份,第二个组件显示城市。

  

//
//  ViewController.m
//  CityPicker
//
//  Created by vousaimer on 15-1-23.
//  Copyright (c) 2015年 va. All rights reserved.
//

#import "ViewController.h"
#import "ProvinceViewController.h"

@interface ViewController ()<CityPickerProtocol>

@property (nonatomic, strong) UIButton *testButton;

@end

@implementation ViewController

- (void)viewDidLoad {
    [super viewDidLoad];

    _testButton = [[UIButton alloc] initWithFrame:CGRectMake(0, 0, 100, 45)];
    [_testButton setTitle:@"cityPicker" forState:UIControlStateNormal];
    _testButton.backgroundColor = [UIColor greenColor];
    [self.view addSubview:_testButton];
    _testButton.center = self.view.center;
    [_testButton addTarget:self action:@selector(testCityPicker:)
          forControlEvents:UIControlEventTouchUpInside];

}

- (void)didReceiveMemoryWarning {
    [super didReceiveMemoryWarning];
    // Dispose of any resources that can be recreated.
}

- (void)testCityPicker:(id)sender
{
    ProvinceViewController *vc = [[ProvinceViewController alloc] initWithNibName:nil bundle:nil];
    vc.delegate = self;
    [self presentViewController:[[UINavigationController alloc] initWithRootViewController:vc] animated:YES completion:^{

    }];
}

- (void)CityPickerDidCancel:(ProvinceViewController *)provinceVC
{
    [provinceVC dismissViewControllerAnimated:YES completion:^{

    }];
}

- (void)CityPickerDidChoose:(ProvinceViewController *)provinceVC
              withResultDic:(NSDictionary *)dic
{
    [provinceVC dismissViewControllerAnimated:YES completion:^{

        NSString *province = dic[@"Province"];
        NSString *city = dic[@"City"];

        NSLog(@"province = %@ , city = %@",province, city);

    }];
}

@end

  第二个组件显示城市

//
//  CityViewController.m
//  CityPicker
//
//  Created by vousaimer on 15-1-24.
//  Copyright (c) 2015年 va. All rights reserved.
//

#import "CityViewController.h"

@interface CityViewController ()

@end

@implementation CityViewController

- (void)viewDidLoad {
    [super viewDidLoad];

    self.tableView.separatorStyle = UITableViewCellSeparatorStyleSingleLine;
}

- (void)didReceiveMemoryWarning {
    [super didReceiveMemoryWarning];
    // Dispose of any resources that can be recreated.
}

- (void)setCityArray:(NSArray *)cityArray
{
    _cityArray = cityArray;

    [[NSOperationQueue mainQueue] addOperationWithBlock:^{
        [self.tableView reloadData];
    }];
}

#pragma mark - Table view data source

- (NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section{
    // Return the number of sections.
    return _cityArray.count;
}

- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath {
    UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:@"CityCell"];
    if(cell == nil)
    {
        cell = [[UITableViewCell alloc] initWithStyle:UITableViewCellStyleDefault
                                      reuseIdentifier:@"ProvinceCell"];
    }
    NSDictionary *dic = self.cityArray[indexPath.row];
    cell.textLabel.text = dic[@"name"];

    cell.accessoryType = UITableViewCellAccessoryNone;

    return cell;
}

- (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath
{
    [tableView deselectRowAtIndexPath:indexPath animated:YES];

    if([self.delegate respondsToSelector:@selector(CityPickerDidChoose:withResultDic:)])
    {
        NSArray *vcArray = self.navigationController.viewControllers;

        [self.delegate CityPickerDidChoose:vcArray[vcArray.count -2]
                             withResultDic:@{@"City":self.cityArray[indexPath.row][@"name"],
                                             @"Province":self.Province}];
    }
}

@end

  

时间: 2024-10-14 12:38:59

省份、城市选择组件的相关文章

vue城市选择组件

适用于vue的城市选择组件 仓库地址 基本功能: 支持全选.反选以及全部清空. 支持按拼音筛选. 勾选省份将会勾选省份下所有城市. 返回数据可灵活处理. 安装 npm install cn-region-picker # 或者 yarn add cn-region-picker 用法 组件引入: // import包 import CnRegionPicker from 'cn-region-picker' // use Vue.use(CnRegionPicker) 使用: v-model="

UIPickerView的简单应用——省份/城市选择的实现

UIPickerView的简单应用--省份/城市选择的实现 实现效果如图,左边为省份选择,右边选择省份对应的城市 数据plist形式如图 工程下载地址:工程下载 https://github.com/Nongchaozhe/UIPickerView-Province-city UIPickerView的实现重要还是两个代理协议中方法的实现 - (void)viewDidLoad { [super viewDidLoad]; [self loadData]; _pickView = [[UIPic

UIPickerView简单应用——省份/城市选择实现

UIPickerView的简单应用--省份/城市选择的实现 实现效果如图,左边为省份选择,右边选择省份对应的城市 数据plist形式如图 工程下载地址:工程下载 https://github.com/Nongchaozhe/UIPickerView-Province-city UIPickerView的实现重要还是两个代理协议中方法的实现 - (void)viewDidLoad { [super viewDidLoad]; [self loadData]; _pickView = [[UIPic

Android实现省份城市的选择教程

Android实现省份城市的选择教程 http://www.itstrike.cn/Question/6ce4c8e8-8d0a-440e-819c-fbf8e781c3ca.html Android中Spinner下拉列表(使用ArrayAdapter和自定义Adapter实现) . http://www.open-open.com/lib/view/open1330651497624.html android-wheel实现省.市.地区联动选择效果 http://qurtyy.blog.16

vue仿淘宝地址选择组件

Vue组件:省市区地址选择组件 <template> <div v-show="addressSelectShow" :style="{'left': leftValue + 'px', 'top': topValue + 'px' }" class="content"> <ul class="area-select"> <li v-for="(item, index) in

学习aiax(javascript)--省份-城市二级下拉联动(POST方式)

1.jsp代码 <%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%> <!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd"

2016-07-05 JavaScript实现省份城市二级联动

简介:利用JavaScript实现省份城市二级联动 <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN"><html><head><meta charset="UTF-8"><title>New Document </title><script language="JavaScript" type=&

android wheelview实现三级城市选择

很早之前看淘宝就有了ios那种的城市选择控件,当时也看到网友有分享,不过那个写的很烂,后来(大概是去年吧),我们公司有这么一个项目,当时用的还是网上比较流行的那个黑框的那个,感觉特别的丑,然后我在那个开源的wheelview的基础上做封装,用户只需要专心数据的组装即可,然后填充就行,其他的可以不必考虑. 先上下效果图 接下来说下我的思路:网络请求-数据返回-设置数据-数据填充控件 接下来直接按上面的流程直接上代码: 网络请求我用的本地的json数据 String address = Utils.

vue仿京东省市区三级联动选择组件

工作中需要一个盒京东购物车地址选择相似的一个省市区三级联动选择组件,google查了下都是下拉框形式的,于是自己写了一个,希望对使用vue开发项目的朋友有帮助,显示效果如下:使用vue2.0开发 html代码如下 <!--居住地址三级联动选项--> <section class="showChose" v-show="showChose"> <section class="address"> <secti