You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

480 lines
16 KiB

//
// TableCell.m
// myWear
//
// Created by xTT on 2017/1/18.
// Copyright © 2017xTT. 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 ()<UITextFieldDelegate>
@interface TextFieldCell ()<UITextFieldDelegate,UIPickerViewDelegate,UIPickerViewDataSource>
{
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;