关于蒙板哪一套逻辑和思路讲解数组
截图1:-------------------------------------------async
截图2:-------------------------------------------ide
截图3:-------------------------------------------优化
上面截图:--------------------------------------结束截图lua
1:首先蒙板那一套咱们可使用一套便可,蒙板外面只要传一个view控件内容、或者一个控制器:(而后在外面操做全部数据交互效果),关于蒙板的模版讲解在上册已经讲过,这里就再也不多说了spa
2:咱们在外面给蒙板传一个view或者控制器,咱们须要在view和控制器里面有一个block回调或者代理,看本身喜欢吧,这样是为了:在你谈下蒙板的时候,将选择的值传给当前控制器线程
3:这时候,你就只要和当前控制器和弹出蒙板出来的之后的那个view或者控制器交互数据就能够了代理
4:三步曲==建立-传内容-显示code
5:请求数据==当咱们请求数据的时候,在蒙板里面选择数据之后,咱们通常都是将数据传到外面控制中,经过block或者代理-而后dismiss掉蒙板-而后请求接口(在当前控制器下)component
6:代码演示:
// 建立 GoodsDetaiParameterView * goodsDetaiParameterView = [GoodsDetaiParameterView goodsDetaiParameterView]; MeSelectDateViewController *vc = [[MeSelectDateViewController alloc]init]; vc.dataArr = [self.timeData copy]; vc.model = self.model; // 传模型 vc.myBlock = ^ (NSString *year ,NSString *month, NSString *day) { YLLog(@"year=%@ month=%@ day=%@",year,month,day); [goodsDetaiParameterView dismiss]; [self loadSelectYear:year month:month day:day]; }; goodsDetaiParameterView.contentController = vc; // 显示 [goodsDetaiParameterView show];
额外点金:
1:获取当前手机端的真实年、月、日
NSDateFormatter *formatter = [[NSDateFormatter alloc] init]; [formatter setDateFormat:@"yyyy-MM-dd"]; NSDate *myDate = [NSDate date]; NSString *dateTime = [formatter stringFromDate:myDate]; NSRange range = [dateTime rangeOfString:@"-"]; if (range.length) { self.dateTimeArray = [dateTime componentsSeparatedByString:@"-"]; }
2:根据哪一年哪一月计算多少天数
#pragma mark - 获取-天数组 - (NSMutableArray *)returnDayArray:(NSUInteger)count { [self.dayArray removeAllObjects]; dispatch_async(dispatch_get_global_queue(0, 0), ^{ for (int i=1; i<=count; i++) { [self.dayArray addObject:[NSString stringWithFormat:@"%@",@(i)]]; } dispatch_async(dispatch_get_main_queue(), ^{ [self.tableView reloadData]; [self selectIndexPathForRow:[self modelWithIndex:self.index]]; }); }); return self.dayArray; } #pragma mark - 获取那一年那一月共有多少天 - (NSUInteger)getNumberOfDaysOneYear:(NSDate *)date{ NSCalendar *calender = [NSCalendar currentCalendar]; NSRange range = [calender rangeOfUnit:NSCalendarUnitDay inUnit: NSCalendarUnitMonth forDate: date]; return range.length; } #pragma mark - 传一个月份和一个年份字符串,返回一个NSDate - (NSDate *)returnDateTimeWithMonthString:(NSString *)monthStr yearString:(NSString *)yearStr { NSDateFormatter *formatter = [[NSDateFormatter alloc] init]; NSTimeZone *timeZone = [NSTimeZone localTimeZone]; [formatter setTimeZone:timeZone]; [formatter setDateFormat : @"M/yyyy"]; // 格式示范:@"2/2035"; NSString *stringTime = [NSString stringWithFormat:@"%@/%@",monthStr,yearStr]; return [formatter dateFromString:stringTime]; }
3:选中哪一行:必需是刷新后才能看到效果,千万不能在刷新以前执行下面的代码
[self.tableView selectRowAtIndexPath:[NSIndexPath indexPathForRow:[self.tempArray indexOfObject:object] inSection:0] animated:NO scrollPosition:UITableViewScrollPositionMiddle];
自定义选中颜色样式:
UIView *selectedView = [[UIView alloc]initWithFrame:self.frame]; selectedView.backgroundColor = [UIColor YLColorBaby]; self.selectedBackgroundView = selectedView;
系统选中颜色样式:
self.selectionStyle = UITableViewCellSelectionStyleNone;
4:初始化建立多个控件、遍历
- (instancetype)initWithdataArray:(NSArray *)arr { if (self = [super init]) { self.frame = CGRectMake(0, 0, YLScreenW, 101); self.backgroundColor = [UIColor YLColorWhite]; if (arr.count==0) { arr = [NSArray arrayWithObjects:@"年",@"月",@"日",nil]; }else { NSMutableArray *arr1 = [NSMutableArray array]; [arr1 addObject:[NSString stringWithFormat:@"%@年",arr[0]]]; [arr1 addObject:[NSString stringWithFormat:@"%@月",arr[1]]]; [arr1 addObject:[NSString stringWithFormat:@"%@日",arr[2]]]; arr = [arr1 copy]; } CGFloat lblX = 0; CGFloat lblY = 50; CGFloat lblW = (int)(YLScreenW-lblX*2)/4; CGFloat lblH = 50; for (int i=0; i<arr.count; i++) { UIButton *btn = [[UIButton alloc]init]; [btn setTitle:arr[i] forState:UIControlStateNormal]; [btn setTitleColor:[UIColor YLColorGrayPrimary] forState:UIControlStateNormal]; [btn setTitleColor:[UIColor YLColorRedIcon] forState:UIControlStateSelected]; btn.titleLabel.font = [UIFont systemFontOfSize:13]; btn.titleLabel.textAlignment = NSTextAlignmentCenter; btn.tag = 10000+i; btn.x = lblX +lblW*i; btn.y = lblY; btn.width = lblW; btn.height = lblH; self.dateBtn = btn; [self addSubview:btn]; [btn addTarget:self action:@selector(btnClick:) forControlEvents:UIControlEventTouchUpInside]; [self.btnArray addObject:btn]; if (i==0 ) { btn.userInteractionEnabled = YES; }else { btn.userInteractionEnabled = NO; } } // 按钮的选中颜色 UIButton *firstButton = self.subviews.firstObject; UIImageView *imgV = [[UIImageView alloc]initWithImage:[UIImage imageNamed:@"product_list"]]; imgV.width = 45; imgV.height = 3; imgV.centerX = firstButton.centerX; imgV.y = self.height - imgV.height; [self addSubview:imgV]; self.imageView = imgV; // 自动计算好第一个按钮的文字宽度 [firstButton.titleLabel sizeToFit]; // 默认:选中第一个按钮 [self btnClick:firstButton]; [self setupUI]; } return self; }
5:若是咱们想要拿到刚开始初始化一次性建立的多个按钮,咱们能够将其放在一个数组中保存起来,经过不一样下标取出里面的按钮,就能够改变每个按钮的内容了,
#pragma mark - 外部修改方法 - (void)configBtn:(NSInteger)index title:(NSString *)title { NSString *newTitle = nil; switch (index-1) { case 0: newTitle = [NSString stringWithFormat:@"%@年",title]; break; case 1: newTitle = [NSString stringWithFormat:@"%@月",title]; break; default: break; } UIButton *btn = self.btnArray[index-1]; [btn setTitle:newTitle forState:UIControlStateNormal]; UIButton *btn1 = self.btnArray[index]; [self changeButtonStatus:btn1]; for (int i=0; i<=index; i++) { UIButton *button = self.btnArray[i]; button.userInteractionEnabled = YES; } }
6:一排按钮的点击状态修改:
#pragma mark - 公用方法提取出来 - (void)changeButtonStatus:(UIButton *)sender { // 设置当前按钮的状态 self.dateBtn.selected = NO; // 设置传入的按钮为选中状态 sender.selected = YES; // 设置当前按钮为传入的按钮 self.dateBtn = sender; // 指示器 [UIView animateWithDuration:0.25 animations:^{ self.imageView.width = 45; //sender.titleLabel.width; self.imageView.centerX = sender.centerX; }]; }
7:优化处理:
后期我将全部的数据都是经过模型去修改,也就是说在这里面的年、月、日都是经过模型传来传去,在模型里面操做数据的根本,很方便
/** * 时间戳转换为时间 */ - (NSString *)ctime { NSTimeInterval interTime = [_ctime doubleValue] + 0; NSDate *date = [NSDate dateWithTimeIntervalSince1970:interTime]; NSDateFormatter *formatter = [[NSDateFormatter alloc]init]; [formatter setDateFormat:@"yyyy-MM-dd"]; //[formatter setDateFormat:@"yyyy-MM-dd HH:mm:ss"]; NSString *str = [formatter stringFromDate:date]; return str; }
8:---判断年月日数据为空或者其余类型的时候,还有不能为0的字符串的判断---
#import "YLStrTool.h" @implementation YLStrTool + (BOOL)isEmpty:(NSString *)str{ if(str.length<=0 || str==nil ||[str isKindOfClass:[NSNull class]]){ return YES; } return NO; } #pragma mark - 是否合法 - (BOOL)islegal:(NSString *)str { if ([YLStrTool isEmpty:str]) { //是空的 return YES; }else { //不是空的 if ([str isEqualToString:@"0"]) { return YES; }else { return NO; } } }
9:---这两个get方法都试模型数据的get方法:目的是给模型数据从新加工处理之后,才输出给咱们,好比说06月->6月---
/** * 判断06月 -> 6月 */ - (NSString *)b_month { if ([_b_month hasPrefix:@"0"]) { return [_b_month substringFromIndex:1]; }else { return _b_month; } } - (NSString *)b_day { if ([_b_day hasPrefix:@"0"]) { return [_b_day substringFromIndex:1]; }else { return _b_day; } }
10-将6月-6,正则匹配而后进行裁剪
#pragma mark - 数字和中文组合的字符串:提取纯数字 // self为当前字符串 - (NSString *)stringToNumberStr { NSString * regex = @"^[0-9]*$"; NSPredicate * pred = [NSPredicate predicateWithFormat:@"SELF MATCHES %@", regex]; if ([pred evaluateWithObject:self]) { //是纯数字 return self; } else { // 不是纯数字 return [self substringToIndex:self.length-1]; } return nil; }
11-遍历数组for循环的时候,最好是开启一个子线程-如:
dispatch_async(dispatch_get_global_queue(0, 0), ^{ for (int i=0; i<distanceValue; i++) { long originDate = [dateTime longLongValue]; long newDate = originDate - i; [self.yearArray insertObject:[NSString stringWithFormat:@"%@",@(newDate)] atIndex:0]; } NSMutableArray *latestDateArray = [NSMutableArray array]; for (int j=distanceValue; j>0; j--) { long originDate = [dateTime longLongValue]; long newDate = originDate + j; [latestDateArray insertObject:[NSString stringWithFormat:@"%@",@(newDate)] atIndex:0]; } [self.yearArray addObjectsFromArray:latestDateArray]; self.tempArray = self.yearArray; dispatch_async(dispatch_get_main_queue(), ^{ [self.tableView reloadData]; [self.tableView selectRowAtIndexPath:[NSIndexPath indexPathForRow:[self.tempArray indexOfObject:[self modelWithIndex:self.index]] inSection:0] animated:NO scrollPosition:UITableViewScrollPositionMiddle]; }); });