@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);//button的frame
[leftBtn setTitle:@"取消" forState:UIControlStateNormal];//设置button的title
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);//button的frame
[rightBtn setTitle:@"确认" forState:UIControlStateNormal];//设置button的title
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;
}