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

 

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM