// // TableCell.m // myWear // // Created by xTT on 2017/1/18. // Copyright © 2017年 xTT. All rights reserved. // #import "TableCell.h" #import "myHelper.h" #import "MyHttp.h" #import "Masonry.h" #import "XHVoiceRecordHelper.h" #import "CJFileUtility.h" #import "VoiceConverter.h" #import "XHAudioPlayerHelper.h" #import "SVProgressHUD.h" #import "VoiceAlarm.h" @class UITableViewCellEditControl; @implementation baseCell -(instancetype)initWithStyle:(UITableViewCellStyle)style reuseIdentifier:(NSString *)reuseIdentifier{ if (self == [super initWithStyle:style reuseIdentifier:reuseIdentifier]) { self.accessoryType = UITableViewCellAccessoryDisclosureIndicator; [self setSelectionStyle:UITableViewCellSelectionStyleNone]; self.detailTextLabel.textColor = [UIColor darkGrayColor]; self.textLabel.font = DefineFontSize; self.detailTextLabel.font = DefineFontSize; } return self; } -(void)showHiddenAccessoryDisclosureIndicator:(BOOL)state{ if(state){ self.accessoryType = UITableViewCellAccessoryDisclosureIndicator; }else{ self.accessoryType = UITableViewCellAccessoryNone; } } - (IBAction)cellClick:(id)sender{ self.block(sender,self); } - (void)initCellView:(baseModel *)cModel{ } -(void)setEditing:(BOOL)editing animated:(BOOL)animated{ [super setEditing:editing animated:animated]; for (UIView *subView in self.subviews) { if([NSStringFromClass([subView class]) isEqualToString:@"UITableViewCellEditControl"]){ UIImageView * imgView = (UIImageView*)[subView valueForKey:@"imageView"]; // UIImageView * imgView = [[control subviews] objectAtIndex:0]; imgView.image = [UIImage imageNamed:@"编辑删除"]; } // NSLog(@"%@",NSStringFromClass([subView class])); } } -(void)willTransitionToState:(UITableViewCellStateMask)state { [super willTransitionToState:state]; if(state == UITableViewCellStateShowingEditControlMask){ for (UIView *subView in self.subviews) { if([NSStringFromClass([subView class]) isEqualToString:@"UITableViewCellEditControl"]){ UIImageView * imgView = (UIImageView*)[subView valueForKey:@"imageView"]; // UIImageView * imgView = [[control subviews] objectAtIndex:0]; imgView.image = [UIImage imageNamed:@"编辑删除"]; } if ([NSStringFromClass([subView class]) isEqualToString:@"UITableViewCellDeleteConfirmationView"]){ // NSLog(@"%@",subView); } } } if(state == 3){ for (UIView *subView in self.subviews) { if([NSStringFromClass([subView class]) isEqualToString:@"UITableViewCellEditControl"]){ UIImageView * imgView = (UIImageView*)[subView valueForKey:@"imageView"]; // UIImageView * imgView = [[control subviews] objectAtIndex:0]; imgView.image = [UIImage imageNamed:@"编辑删除"]; } // NSLog(@"%@",NSStringFromClass([subView class])); } } } @end //@interface TextFieldCell () @interface TextFieldCell () { NSInteger _startNum; NSInteger _endNum; NSInteger _nowIndex; } @end @implementation TextFieldCell - (UITextField *)textField{ if (!_textField) { _textField = [[UITextField alloc] init]; _textField.textColor = [UIColor darkGrayColor]; _textField.textAlignment = NSTextAlignmentRight; _textField.font = DefineFontSize; _textField.delegate = self; [self.contentView addSubview:_textField]; //取消 输入回调 [_textField addTarget:self action:@selector(cellClick:) forControlEvents:UIControlEventEditingChanged]; [_textField mas_makeConstraints:^(MASConstraintMaker *make) { make.left.mas_equalTo(110); make.centerY.mas_equalTo(self.textLabel); if (self.accessoryType == UITableViewCellAccessoryDisclosureIndicator) { make.right.mas_equalTo(0); }else{ make.right.mas_equalTo(-4); } make.height.mas_equalTo(self); }]; } return _textField; } - (void)timeInputViewWithModel:(UIDatePickerMode)mode WithData:(NSDate *)nowDate{ self.textField.textAlignment = NSTextAlignmentRight; // [self.textField mas_remakeConstraints:^(MASConstraintMaker *make) { // make.right.mas_equalTo(-15); // make.width.mas_equalTo(62); // make.height.mas_equalTo(30); // make.centerY.mas_equalTo(self.textLabel); // }]; // self.textField.layer.cornerRadius = 15; // self.textField.layer.borderColor = RGB(240, 240, 240).CGColor; // self.textField.layer.borderWidth = 1; //self.textField.textAlignment = 1; UIDatePicker *datePicker = [[UIDatePicker alloc] init]; datePicker.datePickerMode = mode; // datePicker.datePickerMode = UIDatePickerModeTime; datePicker.date = nowDate; //datePicker.frame = CGRectMake(0, 40, ScreenWidth, 200); if (@available(iOS 13.4, *)) { datePicker.preferredDatePickerStyle = UIDatePickerStyleWheels; } [datePicker addTarget:self action:@selector(cellClick:) forControlEvents:UIControlEventValueChanged]; self.textField.inputView = datePicker; } - (void)numberInputViewWithStartNum:(NSInteger)startNum EndNum:(NSInteger)endNum WithIndex:(NSInteger)nowIndex{ UIPickerView *numberPickerView = [UIPickerView new]; numberPickerView.delegate = self; numberPickerView.dataSource = self; _endNum = endNum; _startNum = startNum; _nowIndex = nowIndex; self.textField.inputView = numberPickerView; } #pragma mark UIPickerViewDataSource 数据源方法 // 返回多少列 - (NSInteger)numberOfComponentsInPickerView:(UIPickerView *)pickerView { return 1; } // 返回多少行 - (NSInteger)pickerView:(UIPickerView *)pickerView numberOfRowsInComponent:(NSInteger)component { return _endNum-_startNum; } #pragma mark UIPickerViewDelegate 代理方法 // 返回每行的标题 -(NSString *)pickerView:(UIPickerView *)pickerView titleForRow:(NSInteger)row forComponent:(NSInteger)component { return [NSString stringWithFormat:@"%d",_endNum+row]; } // 选中行显示在label上 -(void)pickerView:(UIPickerView *)pickerView didSelectRow:(NSInteger)row inComponent:(NSInteger)component { if (self.block) { self.block ([NSString stringWithFormat:@"%d",_endNum+row],self); } } - (void)cellClick:(id)sender{ if (self.block) { if ([sender isKindOfClass:[UITextField class]]) { UITextField *textField = sender; // MARK: 去掉限制 update by lsz 2021-06-23 //if (_maxLimitLength != 0 && [sender text].length > _maxLimitLength) { // textField.text = [textField.text substringToIndex:8]; //} if (textField.keyboardType == UIKeyboardTypePhonePad) { NSString *tmp = textField.text; NSCharacterSet *cs = [[NSCharacterSet characterSetWithCharactersInString:@"0123456789-"] invertedSet]; textField.text = [[tmp componentsSeparatedByCharactersInSet:cs] componentsJoinedByString:@""]; } self.block (textField.text,self); return; } if([sender isKindOfClass:[UIDatePicker class]]){ UIDatePicker * datePic = (UIDatePicker*)sender; if (datePic.datePickerMode == UIDatePickerModeTime){ //时间 NSString *text = [myHelper getDateFormatWithStr:@"HH:mm" date:[datePic date]]; self.textField.text = text; self.block(text,self); return; }else if (datePic.datePickerMode == UIDatePickerModeDate){//日期 NSString *text = [myHelper getDateFormatWithStr:@"yyyy-MM-dd" date:[datePic date]]; self.textField.text = text; self.block(text,self); return; } } } } #pragma mark UITextFieldDelegate - (BOOL)textField:(UITextField*)textField shouldChangeCharactersInRange:(NSRange)range replacementString:(NSString*)string{ NSString *text = [NSString stringWithFormat:@"%@%@",textField.text,string]; if ((self.regularStr.length > 0) && ![self validateNumber:text]) { return NO; } return YES; } - (BOOL)textFieldShouldEndEditing:(UITextField *)textField{ if ([textField.inputView isKindOfClass:[UIDatePicker class]]) { UIDatePicker *datePicker = (UIDatePicker *)textField.inputView; if (datePicker.datePickerMode == UIDatePickerModeTime){ //时间 NSString *text = [myHelper getDateFormatWithStr:@"HH:mm" date:[datePicker date]]; textField.text = text; self.block(text,self); }else if (datePicker.datePickerMode == UIDatePickerModeDate){//日期 NSString *text = [myHelper getDateFormatWithStr:@"yyyy-MM-dd" date:[datePicker date]]; textField.text = text; self.block(text,self); } } return YES; } #pragma mark 正则表达式判断 -(BOOL)validateNumber:(NSString *)text { NSPredicate *numberPre = [NSPredicate predicateWithFormat:@"SELF MATCHES %@",self.regularStr]; return [numberPre evaluateWithObject:text]; } @end @implementation RailCell - (UILabel *)label_radius{ if (!_label_radius) { _label_radius = [UILabel new]; _label_radius.textColor = RGB(0, 200, 100); _label_radius.font = [myHelper fixFoneSize:12 font:_label_radius.font]; [self.contentView addSubview:_label_radius]; [_label_radius mas_makeConstraints:^(MASConstraintMaker *make) { make.centerY.mas_equalTo(self.textLabel); make.right.mas_equalTo(-15); }]; } return _label_radius; } @end @implementation DailyCell @end @implementation PlayVoiceCell - (UIButton *)newBbtn{ UIButton *btn = [UIButton buttonWithType:UIButtonTypeCustom]; [btn setTitleColor:[UIColor darkGrayColor] forState:UIControlStateNormal]; btn.frame = CGRectMake(0, 0, 80 * FIX_SCREEN, 36 * FIX_SCREEN); btn.titleLabel.font = [UIFont systemFontOfSize:17 * FIX_SCREEN]; [btn addTarget:self action:@selector(cellClick:) forControlEvents:UIControlEventTouchUpInside]; UIImageView *imageView = btn.imageView; //设置动画帧 imageView.animationImages = @[[myHelper getImageWithName:@"播放录音1"], [myHelper getImageWithName:@"播放录音2"], [myHelper getImageWithName:@"播放录音3"]]; imageView.animationDuration = 1.0; //交换文字和图片的位置 [btn setTitleEdgeInsets:UIEdgeInsetsMake(0, -imageView.image.size.width, 0, imageView.image.size.width)]; [btn setImageEdgeInsets:UIEdgeInsetsMake(0, btn.titleLabel.bounds.size.width + 5, 0, -btn.titleLabel.bounds.size.width)]; btn.layer.borderColor = [UIColor lightGrayColor].CGColor; btn.layer.borderWidth = 1; btn.layer.cornerRadius = 3.0f; [btn.layer setMasksToBounds:YES]; return btn; } - (void)initCellView:(baseModel *)bModel{ UIButton *btn = [self newBbtn]; [btn setTitle:@"未录音" forState:UIControlStateNormal]; [btn setTitleColor:[UIColor lightGrayColor] forState:UIControlStateNormal]; [btn setImage:[myHelper getImageWithName:@"未录音"] forState:UIControlStateNormal]; //交换文字和图片的位置 [btn setTitleEdgeInsets:UIEdgeInsetsMake(0, -btn.imageView.image.size.width, 0, btn.imageView.image.size.width)]; [btn setImageEdgeInsets:UIEdgeInsetsMake(0, btn.titleLabel.bounds.size.width + 5, 0, -btn.titleLabel.bounds.size.width)]; btn.enabled = NO; self.accessoryView = btn; self.voicePath = [(VoiceAlarm *)bModel voicePath]; if (!self.voicePath) { self.voicePath = [(VoiceAlarm *)bModel voicePath]; } self.voiceUrl = [(VoiceAlarm *)bModel voiceURL]; if (!self.voiceUrl) { self.voiceUrl = [(VoiceAlarm *)bModel voiceURL]; } } - (IBAction)cellClick:(id)sender{ if (self.voicePath) { [self startAnimation]; }else if (self.voiceUrl) { [self palyVoiceWithUrl:self.voiceUrl]; }else{ [UICommon MessageErrorText:@"尚未录制"]; } if (self.block) { self.block(sender,self); } } - (void)startAnimation{ [[XHAudioPlayerHelper shareInstance] setDelegate:self]; [[XHAudioPlayerHelper shareInstance] managerAudioWithFileName:self.voicePath toPlay:YES]; UIButton *btn = (UIButton *)self.accessoryView; [btn setImage:[myHelper getImageWithName:@"播放录音3"] forState:UIControlStateNormal]; [btn.imageView startAnimating]; } - (void)endAnimation{ UIButton *btn = (UIButton *)self.accessoryView; [btn.imageView stopAnimating]; self.accessoryView = nil; btn = [self newBbtn]; [btn setTitle:@"播放" forState:UIControlStateNormal]; [btn setImage:[myHelper getImageWithName:@"播放录音3"] forState:UIControlStateNormal]; //交换文字和图片的位置 [btn setTitleEdgeInsets:UIEdgeInsetsMake(0, -btn.imageView.image.size.width, 0, btn.imageView.image.size.width)]; [btn setImageEdgeInsets:UIEdgeInsetsMake(0, btn.titleLabel.bounds.size.width + 5, 0, -btn.titleLabel.bounds.size.width)]; [btn setTitleColor:mainColor forState:UIControlStateNormal]; btn.layer.borderColor = mainColor.CGColor; self.accessoryView = btn; } - (void)didAudioPlayerStopPlay:(AVAudioPlayer*)audioPlayer{ [self endAnimation]; } -(void)palyVoiceWithUrl:(NSString *)url{ NSString *path = [CJFileUtility documentsPathSubDir:@"msg_audio" andFile:url]; NSString *wavPath = [path stringByAppendingPathExtension:@"wav"]; NSString *amrPath = [path stringByAppendingPathExtension:@"amr"]; if ([[XHAudioPlayerHelper shareInstance] isPlaying]) { [[XHAudioPlayerHelper shareInstance] pausePlayingAudio]; }else if ([CJFileUtility fileExists:wavPath] || [CJFileUtility fileExists:amrPath]){ if (![CJFileUtility fileExists:wavPath] && [CJFileUtility fileExists:amrPath]) { [self amrToWav:amrPath]; } self.voicePath = wavPath; [self startAnimation]; }else{ WEAKSELF NSURLRequest *request = [NSURLRequest requestWithURL:[NSURL URLWithString:url]]; [[xMyHttp downloadTaskWithRequest:request progress:nil destination:^NSURL * _Nonnull(NSURL * _Nonnull targetPath, NSURLResponse * _Nonnull response) { return [NSURL fileURLWithPath:amrPath]; } completionHandler:^(NSURLResponse * _Nonnull response, NSURL * _Nullable filePath, NSError * _Nullable error) { if (![CJFileUtility fileExists:wavPath] && [CJFileUtility fileExists:amrPath]) { [weakSelf amrToWav:amrPath]; } weakSelf.voicePath = wavPath; [weakSelf startAnimation]; }] resume]; } } - (void)wavToAmr:(NSString *)path { //转格式 if ([CJFileUtility fileExists:path]) { NSString *armPath = [CJFileUtility changeFileExt:path ext:@"amr"]; [VoiceConverter wavToAmr:path amrSavePath:armPath]; } } //转换后删掉amr文件 - (void)amrToWav:(NSString *)path { //转格式 if ([CJFileUtility fileExists:path]) { NSString *wavPath = [CJFileUtility changeFileExt:path ext:@"wav"]; [VoiceConverter amrToWav:path wavSavePath:wavPath]; [CJFileUtility deleteFile:path]; } } @end #define STRONGSELF typeof(weakSelf) __strong strongSelf = weakSelf;