// // Copyright © 2018年 dahua. All rights reserved. // #import "LCActionSheet.h" #define kDHActionSheetWindowTag 4590 #define kDHActionSheetButtonTag 990 #define kDHActionSheetAnimationTime .3 #define kDHActionSheetTitleTag 4591 @interface LCActionSheet () { NSString *_unit; NSString *firstSelectedText; NSString *secondSelectedText; } @property (nonatomic, strong) UILabel *titleLabel; @property (nonatomic, strong) UIView *backgroundView; @property (nonatomic, strong) UIButton *cancleBtn; @property (nonatomic, strong) UIButton *submitBtn; @property (nonatomic, strong) UIPickerView *pickerView; @property (nonatomic, strong) NSMutableArray *keyArray; @property (nonatomic, strong) NSMutableDictionary *dataDic; @property (nonatomic, strong) UILabel *unitLabel; @end @implementation LCActionSheet - (instancetype)initWithDataArray:(NSArray *)dataArray delegate:(id)delegate title:(NSString *)title unit:(NSString *)unit cancelButtonTitle:(NSString *)cancelButtonTitle submitButtonTitle:(NSString *)submitButtonTitle { _unit = unit; [self setDataSourceWithDataArr:dataArray]; UIWindow *keyWin = [UIApplication sharedApplication].keyWindow; CGRect winRect = keyWin.frame; self.backgroundView = [[UIView alloc] initWithFrame:winRect]; self.backgroundView.backgroundColor = [UIColor dhcolor_c51]; self.backgroundView.tag = kDHActionSheetWindowTag; self.backgroundView.userInteractionEnabled = YES; [keyWin addSubview: self.backgroundView]; self = [self initWithFrame:CGRectMake(0, winRect.size.height, winRect.size.width, 240)]; [keyWin addSubview:self]; UIView *cancelTap = [[UIView alloc]initWithFrame:CGRectMake(0, 0, winRect.size.width, winRect.size.height - 240)]; cancelTap.backgroundColor = [UIColor dhcolor_c43]; cancelTap.alpha = .1; UIGestureRecognizer* tap = [[UITapGestureRecognizer alloc]initWithTarget:self action:@selector(cancleBtnAction:)]; [cancelTap addGestureRecognizer:tap]; [self.backgroundView addSubview:cancelTap]; self.backgroundColor = [UIColor dhcolor_c43]; _delegate = delegate; self.cancleBtn = [UIButton buttonWithType:UIButtonTypeCustom]; self.cancleBtn.frame = CGRectMake(0, 0, 70, 40); [self.cancleBtn setTitle:cancelButtonTitle forState:UIControlStateNormal]; [self.cancleBtn setTitleColor:[UIColor blackColor] forState:UIControlStateNormal]; [self.cancleBtn addTarget:self action:@selector(cancleBtnAction:) forControlEvents:UIControlEventTouchUpInside]; [self addSubview:self.cancleBtn]; self.titleLabel = [[UILabel alloc] initWithFrame:CGRectMake(70, 0, winRect.size.width - 140, 40)]; self.titleLabel.text = title; self.titleLabel.textAlignment = NSTextAlignmentCenter; [self addSubview:self.titleLabel]; self.submitBtn = [UIButton buttonWithType:UIButtonTypeCustom]; self.submitBtn.frame = CGRectMake(winRect.size.width - 70, 0, 70, 40); [self.submitBtn setTitle:submitButtonTitle forState:UIControlStateNormal]; [self.submitBtn setTitleColor:[UIColor blackColor] forState:UIControlStateNormal]; [self.submitBtn addTarget:self action:@selector(submitBtnAction:) forControlEvents:UIControlEventTouchUpInside]; [self addSubview:self.submitBtn]; // 初始化pickerView self.pickerView = [[UIPickerView alloc]initWithFrame:CGRectMake(0, 40, winRect.size.width, 200)]; //指定数据源和委托 self.pickerView.showsSelectionIndicator = YES; self.pickerView.delegate = self; self.pickerView.dataSource = self; self.pickerView.backgroundColor = [UIColor dhcolor_c43]; [self addSubview:self.pickerView]; [self layoutUnitLabel]; return self; } - (void)setDataSourceWithDataArr:(NSArray *)dataArr { self.keyArray = [NSMutableArray arrayWithCapacity:0]; self.dataDic = [NSMutableDictionary dictionary]; for (int i = 0; i < dataArr.count; i++) { NSString *dataStr = dataArr[i]; if ([dataStr containsString:@"."]) { NSArray *sepDataArr = [dataStr componentsSeparatedByString:@"."]; if ([self.keyArray containsObject:sepDataArr[0]]) { NSMutableArray *value = [self.dataDic valueForKey:sepDataArr[0]]; [value addObject:sepDataArr[1]]; [self.dataDic setValue:value forKey:sepDataArr[0]]; } else { NSMutableArray *valueArr = [NSMutableArray arrayWithObject:sepDataArr[1]]; [self.keyArray addObject:sepDataArr[0]]; [self.dataDic setValue:valueArr forKey:sepDataArr[0]]; } } else { [self.keyArray addObject:dataArr[i]]; [self.dataDic setValue:@[] forKey:dataArr[i]]; } } } - (void)layoutUnitLabel { if (![_unit containsString:@"C"] && ![_unit containsString:@"%"]) { return; } self.unitLabel = [[UILabel alloc] init]; if ([_unit containsString:@"C"]) { self.unitLabel.frame = CGRectMake(self.pickerView.frame.size.width - 100, self.pickerView.frame.size.height / 2 - 22, 44, 44); UILabel *dot = [[UILabel alloc] initWithFrame:CGRectMake(self.pickerView.frame.size.width / 2 - 22, self.pickerView.frame.size.height / 2 - 22, 44, 44)]; dot.text = @"."; dot.textAlignment = NSTextAlignmentCenter; dot.font = [UIFont lcFont_t1]; [self.pickerView addSubview:dot]; } else { self.unitLabel.frame = CGRectMake(self.pickerView.frame.size.width / 2 + 20, self.pickerView.frame.size.height / 2 - 22, 44, 44); } self.unitLabel.text = [self unitChange:_unit]; self.unitLabel.textAlignment = NSTextAlignmentCenter; self.unitLabel.font = [UIFont lcFont_t1]; [self.pickerView addSubview:self.unitLabel]; } #pragma mark UIPickerViewDelegate & UIPickerViewDataSource - (NSInteger)numberOfComponentsInPickerView:(UIPickerView *)pickerView { if ([_unit containsString:@"C"]) { return 2; } return 1; } - (NSInteger)pickerView:(UIPickerView *)pickerView numberOfRowsInComponent:(NSInteger)component { if ([_unit containsString:@"C"]) { if (component == 0) { return self.keyArray.count; } else { NSArray *secondArr = [self.dataDic valueForKey:firstSelectedText]; return secondArr.count; } } return self.keyArray.count; } - (NSString *)pickerView:(UIPickerView *)pickerView titleForRow:(NSInteger)row forComponent:(NSInteger)component { if (0 == component) { return self.keyArray[row];; } else if (1 == component) { NSArray *secondDataArr = self.dataDic[firstSelectedText]; return secondDataArr[row]; } return nil; } - (CGFloat)pickerView:(UIPickerView *)pickerView rowHeightForComponent:(NSInteger)component { return 44; } - (CGFloat)pickerView:(UIPickerView *)pickerView widthForComponent:(NSInteger)component { NSArray *valueArr = [self.dataDic valueForKey:self.keyArray[0]]; if (valueArr.count > 0) { return 100; } return 150.0; } - (void)pickerView:(UIPickerView *)pickerView didSelectRow:(NSInteger)row inComponent:(NSInteger)component { if (component == 0) { firstSelectedText = self.keyArray[row]; NSArray *secondArr = self.dataDic[firstSelectedText]; if (secondArr && secondArr.count > 0) { secondSelectedText = secondArr[0]; [pickerView reloadComponent:1]; [pickerView selectRow:0 inComponent:1 animated:YES]; } else { secondSelectedText = @""; } } else if (component == 1) { // 设置第二个标题 NSArray *secondArr = self.dataDic[firstSelectedText]; if (secondArr && secondArr.count > 0) { secondSelectedText = secondArr[row]; } } if (secondSelectedText.length > 0) { self.selectedData = [NSString stringWithFormat:@"%@.%@", firstSelectedText, secondSelectedText]; } else { self.selectedData = firstSelectedText; } NSLog(@"TEXT======%@", self.selectedData); } - (void)setSelectedData:(NSString *)selectedData { _selectedData = selectedData; if ([selectedData containsString:@"."]) { NSArray *selectedArr = [selectedData componentsSeparatedByString:@"."]; if ([self.keyArray containsObject:selectedArr[0]]) { NSInteger index1 = [self.keyArray indexOfObject:selectedArr[0]]; NSArray *compArr = [self.dataDic valueForKey:selectedArr[0]]; NSInteger index2 = 0; if ([compArr containsObject:selectedArr[1]]) { index2 = [compArr indexOfObject:selectedArr[1]]; } firstSelectedText = selectedArr[0]; secondSelectedText = selectedArr[1]; [self.pickerView reloadAllComponents]; [self.pickerView selectRow:index1 inComponent:0 animated:YES]; [self.pickerView selectRow:index2 inComponent:1 animated:YES]; } } else if ([self.keyArray containsObject:selectedData]) { firstSelectedText = selectedData; NSInteger index = [self.keyArray indexOfObject:selectedData]; [self.pickerView reloadAllComponents]; [self.pickerView selectRow:index inComponent:0 animated:YES]; } } - (void)show { [UIView animateWithDuration:kDHActionSheetAnimationTime animations:^{ CGPoint point = self.center; CGFloat height = self.frame.size.height; self.center = CGPointMake(point.x, point.y - height); }]; } - (void)submitBtnAction:(id)sender { if ([_delegate respondsToSelector:@selector(actionSheetSubmit:)]) { [_delegate actionSheetSubmit:self]; } [self dismiss]; } - (void)cancleBtnAction:(id)sender { if ([_delegate respondsToSelector:@selector(actionSheetCancel:)]) { [_delegate actionSheetCancel:self]; } [self dismiss]; } - (void)dismiss { [self.backgroundView removeFromSuperview]; self.backgroundView = nil; [UIView animateWithDuration:kDHActionSheetAnimationTime animations:^{ CGPoint point = self.center; CGFloat height = self.frame.size.height; self.center = CGPointMake(point.x, point.y + height); } completion:^(BOOL beFinished){ [self removeFromSuperview]; }]; } - (NSString *)unitChange:(NSString *)unit { if ([unit containsString:@"C"]) { unit = @"°C"; } return unit; } @end