三级地址选择器

@property (nonatomic, strong)UIPickerView *pickerView;

//城市选择data

@property (strong, nonatomic) NSDictionary *pickerDic;

@property (strong, nonatomic) NSMutableArray *provinceArray;

@property (strong, nonatomic) NSArray *cityArray;

@property (strong, nonatomic) NSArray *townArray;

@property (strong, nonatomic) NSArray *selectedArray;


//取消和确定按钮父视图

@property (nonatomic, strong)UIView *btnView;

//半透明视图

@property (nonatomic, strong)UIView *translucentView;








- (void)viewDidLoad {

    [super viewDidLoad];

    [self dealAdressData];

    // Do any additional setup after loading the view, typically from a nib.

}

//地址数据库

- (void)dealAdressData {

    NSString *path = [[NSBundle mainBundle] pathForResource:@"Address" ofType:@"plist"];

    self.pickerDic = [[NSDictionary alloc] initWithContentsOfFile:path];

    NSArray *provinceSortArr = @[@"北京市", @"天津市", @"河北省", @"山西省", @"内蒙古", @"辽宁省", @"吉林省", @"黑龙江省", @"上海市", @"江苏省", @"浙江省", @"安徽省", @"福建省", @"江西省", @"山东省", @"河南省", @"湖北省", @"湖南省", @"广东省", @"广西省", @"海南省", @"重庆市", @"四川省", @"贵州省", @"云南省", @"西藏", @"陕西省", @"甘肃省", @"青海省", @"宁夏", @"新疆", @"香港", @"澳门", @"台湾省"];

    //保证plist文件中的地址一致  [self.pickerDic allKeys]是无序的

    self.provinceArray = [provinceSortArr mutableCopy];

    

    self.selectedArray = [self.pickerDic objectForKey:[self.provinceArray objectAtIndex:0]];

    if (self.selectedArray.count > 0) {

        self.cityArray = [[self.selectedArray objectAtIndex:0] allKeys];

    }

    if (self.cityArray.count > 0) {

        self.townArray = [[self.selectedArray objectAtIndex:0] objectForKey:[self.cityArray objectAtIndex:0]];

    }

}


- (void)touchesBegan:(NSSet<UITouch *> *)touches withEvent:(UIEvent *)event {

    [self designUiPickerView];

}


//PickerView设计

- (void)designUiPickerView {

    

    //添加pickerView

    self.pickerView = [[UIPickerView alloc]initWithFrame:CGRectMake(0, heightEx(667 - 240), widthEx(375), heightEx(240))];

    //pickerView上方添加取消和确定按钮

    self.btnView = [[UIView alloc]initWithFrame:CGRectMake(0, heightEx(667 - 240 - 50), widthEx(375), heightEx(50))];

    self.btnView.backgroundColor = [UIColor whiteColor];

    [self.view addSubview:self.btnView];

    //取消按钮

    UIButton *leftBtn = [UIButton buttonWithType:UIButtonTypeCustom];//button的类型

    leftBtn.frame = CGRectMake(20, 0, 40, self.btnView.frame.size.height);//buttonframe

    [leftBtn setTitle:@"取消" forState:UIControlStateNormal];//设置buttontitle

    leftBtn.titleLabel.font = [UIFont systemFontOfSize:14];//title字体大小

    leftBtn.titleLabel.textAlignment = NSTextAlignmentCenter;//设置title的字体居中

//    [leftBtn setTitleColor:RGBColor(0x66, 0x66, 0x66) forState:UIControlStateNormal];//设置title在一般情况下为白色字体

    [leftBtn addTarget:self action:@selector(cancelAction:) forControlEvents:UIControlEventTouchUpInside];

    [self.btnView addSubview:leftBtn];

    //确定按钮

    UIButton *rightBtn = [UIButton buttonWithType:UIButtonTypeCustom];//button的类型

    rightBtn.frame = CGRectMake(365 - 60, 0, 40, self.btnView.frame.size.height);//buttonframe

    [rightBtn setTitle:@"确认" forState:UIControlStateNormal];//设置buttontitle

    rightBtn.titleLabel.font = [UIFont systemFontOfSize:14];//title字体大小

    rightBtn.titleLabel.textAlignment = NSTextAlignmentCenter;//设置title的字体居中

    [rightBtn setTitleColor:[UIColor orangeColor] forState:UIControlStateNormal];

    [rightBtn addTarget:self action:@selector(certainAction:) forControlEvents:UIControlEventTouchUpInside];

    [self.btnView addSubview:rightBtn];

    //pickerView上方添加半透明效果

    self.translucentView = [[UIView alloc]initWithFrame:CGRectMake(0, 0, widthEx(375), heightEx(667 - 240 - 50))];

    self.translucentView.backgroundColor = [UIColor blackColor];

    [self.view addSubview:self.translucentView];

    self.translucentView.alpha = 0.2;

    self.pickerView.backgroundColor = [UIColor whiteColor];

    UITapGestureRecognizer *tap = [[UITapGestureRecognizer alloc] initWithTarget:self action:@selector(tapBack)];

    

    [_translucentView addGestureRecognizer:tap];

    //设置代理

    self.pickerView.delegate = self;

    self.pickerView.dataSource = self;

    self.pickerView.showsSelectionIndicator = YES;

    //    self.pickerView.backgroundColor = RGBColor(0xee, 0xee, 0xee);

    [self.view addSubview:self.pickerView];

}

//取消按钮,translucentView,btnView,pickerView收回,tabBar显示

- (void)cancelAction:(UIButton *)sender {

    [self.translucentView removeFromSuperview];

    [self.btnView removeFromSuperview];

    [self.pickerView removeFromSuperview];

}

//确定按钮,保存数据,pickerView收回

- (void)certainAction:(UIButton *)sender {

    [self.translucentView removeFromSuperview];

    [self.btnView removeFromSuperview];

    [self.pickerView removeFromSuperview];

    

    NSInteger row = [self.pickerView selectedRowInComponent:0];

    //当前选择的省份

    NSString *provinceStr = self.provinceArray[row];

    NSInteger row1 = [self.pickerView selectedRowInComponent:1];

    //当前选中的城市

    NSString *cityStr = self.cityArray[row1];

    NSInteger row2 = [self.pickerView selectedRowInComponent:2];

    //当前选中的县

    NSString *townStr = @"";

    if (self.townArray.count != 0) {

        townStr = self.townArray[row2];

    }

    

    NSMutableString *str = [NSMutableString stringWithCapacity:0];

    //直辖市

    if ([provinceStr isEqualToString:cityStr]) {

        [str appendString:cityStr];

        [str appendString:townStr];

    }else {

        [str appendString:provinceStr];

        [str appendString:cityStr];

        [str appendString:townStr];

    }

    

    //    if (str.length != 0) {

    //        self.selectImageV.alpha = 0;

    //    }

}

- (void)tapBack

{

    [self.translucentView removeFromSuperview];

    [self.btnView removeFromSuperview];

    [self.pickerView removeFromSuperview];

}

#pragma mark pickerViewDelegate


//返回pickerView有多少列

- (NSInteger)numberOfComponentsInPickerView:(UIPickerView *)pickerView {

    return 3;

}

//返回pickerView每一列有多少选项

- (NSInteger)pickerView:(UIPickerView *)pickerView numberOfRowsInComponent:(NSInteger)component {

    if (component == 0) {

        return self.provinceArray.count;

    } else if (component == 1) {

        return self.cityArray.count;

    } else {

        return self.townArray.count;

    }

}

//返回每一列中每一行显示的内容

- (NSString *)pickerView:(UIPickerView *)pickerView titleForRow:(NSInteger)row forComponent:(NSInteger)component {

    if (component == 0) {

        return [self.provinceArray objectAtIndex:row];

    } else if (component == 1) {

        return [self.cityArray objectAtIndex:row];

    } else {

        return [self.townArray objectAtIndex:row];

    }

}

- (UIView *)pickerView:(UIPickerView *)pickerView viewForRow:(NSInteger)row forComponent:(NSInteger)component reusingView:(UIView *)view {

    UILabel *label = (UILabel *)view;

    if (!label) {

        label = [[UILabel alloc] init];

        label.textAlignment = NSTextAlignmentCenter;

        label.backgroundColor = [UIColor whiteColor];

    }

    label.text = [self pickerView:pickerView titleForRow:row forComponent:component];

//    label.textColor = RGBColor(51, 51, 51);

    

    label.font = [UIFont systemFontOfSize:12];

    

    return label;

}


- (void)pickerView:(UIPickerView *)pickerView didSelectRow:(NSInteger)row inComponent:(NSInteger)component {

    if (component == 0) {

        self.selectedArray = [self.pickerDic objectForKey:[self.provinceArray objectAtIndex:row]];

        if (self.selectedArray.count > 0) {

            self.cityArray = [[self.selectedArray objectAtIndex:0] allKeys];

        } else {

            self.cityArray = nil;

        }

        if (self.cityArray.count > 0) {

            self.townArray = [[self.selectedArray objectAtIndex:0] objectForKey:[self.cityArray objectAtIndex:0]];

        } else {

            self.townArray = nil;

        }

    }

    [pickerView selectedRowInComponent:1];

    [pickerView reloadComponent:1];

    [pickerView selectedRowInComponent:2];

    

    if (component == 1) {

        if (self.selectedArray.count > 0 && self.cityArray.count > 0) {

            self.townArray = [[self.selectedArray objectAtIndex:0] objectForKey:[self.cityArray objectAtIndex:row]];

        } else {

            self.townArray = nil;

        }

        [pickerView selectRow:1 inComponent:2 animated:YES];

    }

    

    [pickerView reloadComponent:2];

}


- (CGFloat)pickerView:(UIPickerView *)pickerView rowHeightForComponent:(NSInteger)component {

    //pickerview行高

    return 30;

}


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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值