UIPickerView + 城市选择

当选中省的时候,默认选中第一个row,但必须是选一次城市后,底部Label框才会显示 省和城市的 文字,这里增强只要选择省,也可以在Label中显示省和城市的文字。 


//
//  TXProvince.h
//  SelectCity
//
//  Created by mac on 14-11-24.
//  Copyright (c) 2014年 manyjoys. All rights reserved.
//


#import <Foundation/Foundation.h>


@interface TXProvince : NSObject


@property (nonatomic, copy) NSString *name;
@property (nonatomic, strong) NSArray *cities;


+ (instancetype)provinceWithDict:(NSDictionary *)dict;
- (instancetype)initWithDict:(NSDictionary *)dict;


@end

==================

//
//  TXProvince.m
//  SelectCity
//
//  Created by mac on 14-11-24.
//  Copyright (c) 2014年 manyjoys. All rights reserved.
//


#import "TXProvince.h"


@implementation TXProvince
+ (instancetype)provinceWithDict:(NSDictionary *)dict
{
    return [[self alloc] initWithDict:dict];
}


- (instancetype)initWithDict:(NSDictionary *)dict
{
    if(self = [super init])
    {
        //self.name = dict[@"name"];
        //self.cities = dict[@"cities"];
        
        [self setValuesForKeysWithDictionary:dict];
        
    }
    return self;
}


@end

===================

//
//  TXViewController.m
//  SelectCity
//
//  Created by mac on 14-11-24.
//  Copyright (c) 2014年 manyjoys. All rights reserved.
//


#import "TXViewController.h"
#import "TXProvince.h"


@interface TXViewController () <UIPickerViewDataSource, UIPickerViewDelegate>
@property (nonatomic, strong) NSMutableArray *provinces;
@property (nonatomic, weak)  UIPickerView *pickerView;
@property (nonatomic, weak)  UILabel *displayView;
@end


@implementation TXViewController


- (void)viewDidLoad
{
    [super viewDidLoad];

    UIPickerView *pickView = [[UIPickerView alloc] init];
    pickView.dataSource = self;
    pickView.delegate = self;
    pickView.showsSelectionIndicator = YES;
    
    
    [self.view addSubview:pickView];
    self.pickerView = pickView;
    
    [self.pickerView selectRow:0 inComponent:0 animated:YES];
    
    UILabel *displayView = [[UILabel alloc] initWithFrame:CGRectMake(0, 400, 300, 44)];
    displayView.backgroundColor = [UIColor grayColor];
    displayView.textColor = [UIColor greenColor];
    
    [self.view addSubview:displayView];
    self.displayView = displayView;
    
}


- (NSInteger)numberOfComponentsInPickerView:(UIPickerView *)pickerView
{
    return 2;
}


- (NSInteger)pickerView:(UIPickerView *)pickerView numberOfRowsInComponent:(NSInteger)component
{
    if (component == 0) {
        return self.provinces.count;
    } else {
        int provinceIndex = [pickerView selectedRowInComponent:0];
        TXProvince *province = self.provinces[provinceIndex];
        return province.cities.count;
    }
}


- (NSString *)pickerView:(UIPickerView *)pickerView titleForRow:(NSInteger)row forComponent:(NSInteger)component
{
    if (component == 0) {
        TXProvince *province = self.provinces[row];
        
        
        return province.name;
    } else {
        int cityIndex =  [pickerView selectedRowInComponent:1];
        int provinceIndex = [pickerView selectedRowInComponent:0];
        TXProvince *province = self.provinces[provinceIndex];
        
        [self displayProvince:province.name AndCity:province.cities[cityIndex]];// 代理方法自动改变城市时,在底部label显示被选中的省和城市文字
        
        return province.cities[row];
    }
}


- (void)displayProvince:(NSString *)province AndCity:(NSString *)city
{
    self.displayView.text = [NSString stringWithFormat:@"%@ - %@", province, city];
}


- (void)pickerView:(UIPickerView *)pickerView didSelectRow:(NSInteger)row inComponent:(NSInteger)component
{
    if (component == 0) {
        [self.pickerView reloadComponent:1]; // 刷新component,会自动调用数据源和代理的相关方法
        
        [self.pickerView selectRow:0 inComponent:1 animated:YES];
        
    } else {
        int provinceIndex = [pickerView selectedRowInComponent:0];
        int cityIndex =  [pickerView selectedRowInComponent:1];
        TXProvince *province = self.provinces[provinceIndex];
        
        [self displayProvince:province.name AndCity:province.cities[cityIndex]]; // 通过鼠标改变城市时,在底部label显示被选中的省和城市文字
    }
}


- (NSMutableArray *)provinces
{
    if (_provinces == nil) {
        NSMutableArray *provinceArray = [NSMutableArray array];
        
        NSString *path = [[NSBundle mainBundle] pathForResource:@"cities.plist" ofType:nil];
        NSArray *dictArray = [NSArray arrayWithContentsOfFile:path];
        
        for (NSDictionary *dict in dictArray) {
            TXProvince *province = [TXProvince provinceWithDict:dict];
            [provinceArray addObject:province];
        }
        _provinces = provinceArray;
    }
    return _provinces;
}


@end

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值