• iOS-省市区选择的实现


    一、简介

         该文主要实现的是省市区的选择,可在个人修改地址的地方使用。

    二、需要的东西

      制作这个首先需要一个area.plist文件,该文件中保存这所有的关于省市区的信息,下载地址:http://pan.baidu.com/s/1qWFPf8g

    三、制作原理

      通过一个UIPickerView来显示,将UIPickerView分成三部分,省、市、区。进而加载数据。

    四、实现效果

      图片展示:

    五、具体实现步骤:

    1、首先,新建一个Single View APplication,然后在Storyboard中添加一个UIpicker View

    2、实现UIPicker View的代理方法  --这里的数据是暂时的,还没添加数据

    #pragma mark - UIPickerViewDelegate
    
    /**
    
     *返回每一列的数据个数
    
     */
    
    -(NSInteger)pickerView:(UIPickerView *)pickerView numberOfRowsInComponent:(NSInteger)component
    
    {
    
        if(component==1)
    
        {
    
               return 2;
    
        }else if (component==2)
    
        {
    
            return 3;
    
        }else
    
        {
    
            return 4;
    
        }
    
        
    
    }
    
    /**
    
     *返回pickerView分几列,因为是省市区选择,所以分3列
    
     */
    
    -(NSInteger)numberOfComponentsInPickerView:(UIPickerView *)pickerView
    
    {
    
        return 3;
    
    }
    
    /**
    
     *触发的事件
    
     */
    
    -(void)pickerView:(UIPickerView *)pickerView didSelectRow:(NSInteger)row inComponent:(NSInteger)component
    
    {
    
        NSLog(@"ss");
    
    }
    
    /**
    
     *通过自定义view去显示pickerView中的内容,这样做的好处是可以自定义的调整pickerView中显示内容的格式
    
     */
    
    -(UIView *)pickerView:(UIPickerView *)pickerView viewForRow:(NSInteger)row forComponent:(NSInteger)component reusingView:(UIView *)view
    
    {
    
        UILabel *myView = nil;
    
        myView = [[UILabel alloc] initWithFrame:CGRectMake(0.0, 0.0, 100, 30)];
    
        myView.textAlignment = NSTextAlignmentCenter;
    
        myView.font = [UIFont systemFontOfSize:15];         //用label来设置字体大小
    
        if (component==0) {
    
            myView.text = @"1";
    
        }else if (component==1)
    
        {
    
            myView.text = @"2";
    
        }else
    
        {
    
            myView.text = @"3";
    
        }
    
        return myView;
    
    }

    3、接下来就是把刚才下载的那个area.plist文件中的数据加入到picker View中

      ①、首先定义三个NSArray。

       

     NSArray *provinceArr,*cityArr,*areaArr;

      ②、先设置provinceArr.cityArr,areaArr.

      provinceArr = [[NSMutableArray alloc] initWithContentsOfFile:[[NSBundle mainBundle] pathForResource:@"area.plist" ofType:nil]];
    
          cityArr = [[provinceArr objectAtIndex:0] objectForKey:@"cities"];
    
          areaArr = [[cityArr objectAtIndex:0] objectForKey:@"areas"];

       默认的province列先显示的第一列,此时刚好让city显示第一列的city,让area显示第一个city的area。

      注:(此处这样设置是因为这个area.plist文件的结构的原因,你可以自己看一下这个plist文件)。

    4、此时数据便有了,但是当滚动第一列时,第二列和第三列都没有变化,其实本质上就是在设置pickerView内容的代理方法中设置内容改变。重头戏来了。--修改上面的这个代理方法。  

    -(void)pickerView:(UIPickerView *)pickerView didSelectRow:(NSInteger)row inComponent:(NSInteger)component
    
    {
    
        if (component==0) {   //当是省的时候
    
            cityArr = [[provinceArr objectAtIndex:row] objectForKey:@"cities"];
    
            [pickerView selectRow:0 inComponent:1 animated:NO];
    
            [self.areaPicker reloadComponent:1];
    
            if ([cityArr count]!=0) {    
    
                 areaArr = [[cityArr objectAtIndex:0] objectForKey:@"areas"];
    
                [pickerView selectRow:0 inComponent:2 animated:NO];
    
                [self.areaPicker reloadComponent:2];
    
            }
    
           }
    
        else if (component==1)
    
        {
    
            areaArr = [[cityArr objectAtIndex:row] objectForKey:@"areas"];
    
            [pickerView selectRow:0 inComponent:2 animated:NO];
    
            [self.areaPicker reloadComponent:2];
    
        }
    
    }
    
     注:不要忘了重新设置每一列的数据个数
    
     if (component==0) {
    
            return [provinceArr count];
    
        }else if(component==1)
    
        {
    
            return [cityArr count];
    
        }else
    
        {
    
            return [areaArr count];
    
        }

    5、附加:

      

    获取三列的内容
    
      province= [[provinceArr objectAtIndex:[self.areaPicker selectedRowInComponent:0]] objectForKey:@"state"];  //获取province
    
         city=  [[cityArr objectAtIndex:[self.areaPicker selectedRowInComponent:1]] objectForKey:@"city"];
    
        if ([areaArr count]!=0) {
    
             area =  [areaArr objectAtIndex:[self.areaPicker selectedRowInComponent:2]];
    
        }

    6、完成,附上源码。(故事版上的设置大家自己设置就行了)

      

    //
    
    //  ViewController.m
    
    //  ProvinceCityDownTownChoose
    
    //
    
    //  Created by xiaoguizi on 15/2/9.
    
    //  Copyright (c) 2015年 xiaoguizi. All rights reserved.
    
    //
    
     ------.m文件------
    
    #import "ViewController.h"
    
     
    
    @interface ViewController ()
    
    {
    
        NSArray *provinceArr,*cityArr,*areaArr;
    
    }
    
    @end
    
     
    
    @implementation ViewController
    
     
    
    - (void)viewDidLoad {
    
        [super viewDidLoad];
    
        provinceArr = [[NSMutableArray alloc] initWithContentsOfFile:[[NSBundle mainBundle] pathForResource:@"area.plist" ofType:nil]];
    
        cityArr = [[provinceArr objectAtIndex:0] objectForKey:@"cities"];
    
        areaArr = [[cityArr objectAtIndex:0] objectForKey:@"areas"];
    
     
    
    }
    
     
    
    #pragma mark - UIPickerViewDelegate
    
    /**
    
     *返回每一列的数据个数
    
     */
    
    -(NSInteger)pickerView:(UIPickerView *)pickerView numberOfRowsInComponent:(NSInteger)component
    
    {
    
        if (component==0) {
    
            return [provinceArr count];
    
        }else if(component==1)
    
        {
    
            return [cityArr count];
    
        }else
    
        {
    
            return [areaArr count];
    
        }
    
    }
    
    /**
    
     *返回pickerView分几列,因为是省市区选择,所以分3列
    
     */
    
    -(NSInteger)numberOfComponentsInPickerView:(UIPickerView *)pickerView
    
    {
    
        return 3;
    
    }
    
    /**
    
     *触发的事件
    
     */
    
    -(void)pickerView:(UIPickerView *)pickerView didSelectRow:(NSInteger)row inComponent:(NSInteger)component
    
    {
    
        if (component==0) {
    
            cityArr = [[provinceArr objectAtIndex:row] objectForKey:@"cities"];
    
            [pickerView selectRow:0 inComponent:1 animated:NO];
    
            [self.areaPicker reloadComponent:1];
    
            if ([cityArr count]!=0) {
    
                areaArr = [[cityArr objectAtIndex:0] objectForKey:@"areas"];
    
                [pickerView selectRow:0 inComponent:2 animated:NO];
    
                [self.areaPicker reloadComponent:2];
    
                
    
            }
    
        }
    
        else if (component==1)
    
        {
    
            areaArr = [[cityArr objectAtIndex:row] objectForKey:@"areas"];
    
            [pickerView selectRow:0 inComponent:2 animated:NO];
    
            [self.areaPicker reloadComponent:2];
    
        }
    
     
    
    }
    
     
    
    /**
    
     *通过自定义view去显示pickerView中的内容,这样做的好处是可以自定义的调整pickerView中显示内容的格式
    
     */
    
    -(UIView *)pickerView:(UIPickerView *)pickerView viewForRow:(NSInteger)row forComponent:(NSInteger)component reusingView:(UIView *)view
    
    {
    
        UILabel *myView = nil;
    
        myView = [[UILabel alloc] initWithFrame:CGRectMake(0.0, 0.0, 100, 30)];
    
        myView.textAlignment = NSTextAlignmentCenter;
    
        myView.font = [UIFont systemFontOfSize:15];         //用label来设置字体大小
    
        if (component==0) {
    
            myView.text =[[provinceArr objectAtIndex:row] objectForKey:@"state"];
    
        }else if (component==1)
    
        {
    
            myView.text =[[cityArr objectAtIndex:row] objectForKey:@"city"];
    
        }else
    
        {
    
            myView.text =[areaArr objectAtIndex:row];
    
        }
    
        return myView;
    
    }
    
    @end
    
    ------.h文件------
    
    //
    
    //  ViewController.h
    
    //  ProvinceCityDownTownChoose
    
    //
    
    //  Created by xiaoguizi on 15/2/9.
    
    //  Copyright (c) 2015年 xiaoguizi. All rights reserved.
    
    //
    
     
    
    #import <UIKit/UIKit.h>
    
     
    
    @interface ViewController : UIViewController<UIPickerViewDataSource,UIPickerViewDelegate>
    
     
    
     
    
    @property (weak, nonatomic) IBOutlet UIPickerView *areaPicker;
    
    @end
    View Code

     

  • 相关阅读:
    Java基础教程:对象比较排序
    算法:深度优先搜索
    微信小程序开发:学习笔记[5]——JavaScript脚本
    微信小程序开发:学习笔记[4]——样式布局
    设计模式:学习笔记(8)——装饰器模式
    设计模式:学习笔记(7)——原型模式
    设计模式——单例模式解析
    玩转Android之数据库框架greenDAO3.0使用指南
    Android开发工具——Android Studio调试技巧
    VR开发的烦恼——范围限制
  • 原文地址:https://www.cnblogs.com/zhanggui/p/4279385.html
Copyright © 2020-2023  润新知