自定义时间选择器UIPickerView

使用方法:

@property (nonatomic, assign) QLChangeTimeView *chooseTimeView;

//时间选择视图

_chooseTimeView = [[NSBundle mainBundle]loadNibNamed:@"QLChangeTimeView" owner:self options:nil].lastObject;

_chooseTimeView.frame = CGRectMake( 时间选择器的大小);

_chooseTimeView.titleArr = @[@"今天",@"明天"];

//当前时间

NSDate *date = [NSDate date];

_chooseTimeView.nowDate = date;

_chooseTimeView.mintInterval = 10;

_chooseTimeView.leadTime = 20;

_chooseTimeView.block = ^(NSString *time) {

//time返回选择的时间

};

//时间选择视图确认按钮

[_chooseTimeView.yesBtn addTarget:self action:@selector(yesBtnClick) forControlEvents:UIControlEventTouchUpInside];

//时间选择视图取消按钮

[_chooseTimeView.noBtn addTarget:self action:@selector(noBtnClick) forControlEvents:UIControlEventTouchUpInside];

[self.view addSubview:_chooseTimeView];


QLChangeTimeView内容:

#import "QLChangeTimeView.h"

@interface QLChangeTimeView()

@property (nonatomic, strong) NSMutableDictionary *dataDic;

@property (nonatomic, strong) NSDictionary *dic;

@property (nonatomic, strong) NSMutableDictionary *HHDic;

@property (nonatomic, strong) NSMutableDictionary *bHHDic;

@property (nonatomic, strong) NSMutableArray *MMArr;

@property (nonatomic, strong) NSMutableArray *mmArr;

@property (nonatomic, strong) NSString *aStr;

@property (nonatomic, strong) NSString *bStr;

@property (nonatomic, strong) NSString *cStr;

@end

@implementation QLChangeTimeView

- (NSDictionary*)dataDic {    

if (!_dataDic) {    

    _dataDic = [NSMutableDictionary dictionary];   

 }    

return _dataDic;

}

- (NSDictionary*)dic {    

if (!_dic) {        

_dic = [NSDictionary dictionary];   

 }    

return _dic;}

-(NSMutableArray *)MMArr {  

  if (!_MMArr) {       

 _MMArr = [NSMutableArray array];            

}   

 return _MMArr;}

-(NSMutableArray *)mmArr {   

 if (!_mmArr) {        

_mmArr = [NSMutableArray array];   

 }   

 return _mmArr;

}

- (void)awakeFromNib {   

 [super awakeFromNib];     

self.pickerView.delegate = self;    

self.pickerView.dataSource = self;        

[self addObserver:self forKeyPath:@"nowDate" options:NSKeyValueObservingOptionNew context:nil];

}

- (IBAction)noBtnClick:(id)sender {      

      }

- (IBAction)yesBtnClick:(id)sender {     

   _result = [NSString stringWithFormat:@"%@ %@:%@",_aStr,_bStr,_cStr];          MYLog(@"%@",_result);   

 _block(_result);  

  _aStr = nil;    

_bStr = nil;    

_cStr = nil;

}

#pragma mark -- UIPickerView

//1.有几列

- (NSInteger)numberOfComponentsInPickerView:(UIPickerView *)pickerView {

_dic = _dataDic[@"0"];

NSArray *arr = _dic.allKeys;

NSArray *result = [arr sortedArrayUsingComparator:^NSComparisonResult(id  _Nonnull obj1, id  _Nonnull obj2) {

return [obj1 compare:obj2]; //升序

}];

_MMArr = [result copy];

NSString *name = _MMArr[0];

_mmArr = _dic[name];

return 3;

}

//2.每一列有几行

- (NSInteger)pickerView:(UIPickerView *)pickerView numberOfRowsInComponent:(NSInteger)component {

switch (component) {

case 0:

return _titleArr.count;

case 1:{

return _MMArr.count;

}

default:{

return _mmArr.count;

}

}

}

//3.每一列显示什么内容

- (UIView *)pickerView:(UIPickerView *)pickerView viewForRow:(NSInteger)row forComponent:(NSInteger)component reusingView:(UIView *)view

{

UILabel *lblDate = [[UILabel alloc] init];

[lblDate setFont:[UIFont systemFontOfSize:16.0]];

[lblDate setTextColor:[UIColor blackColor]];

[lblDate setBackgroundColor:[UIColor clearColor]];

[lblDate setTextAlignment:NSTextAlignmentCenter];

if (component == 0) {

[lblDate setText:_titleArr[row]];

} else if (component == 1) {

[lblDate setText:[NSString stringWithFormat:@"%@点",_MMArr[row]]];

} else {

[lblDate setText:[NSString stringWithFormat:@"%@分",_mmArr[row]]];

}

return lblDate;

}

//选中

- (void)pickerView:(UIPickerView *)pickerView didSelectRow:(NSInteger)row inComponent:(NSInteger)component {

if (component == 0) {

_dic = _dataDic[[NSString stringWithFormat:@"%ld",(long)row]];

NSArray *arr = _dic.allKeys;

NSArray *result = [arr sortedArrayUsingComparator:^NSComparisonResult(id  _Nonnull obj1, id  _Nonnull obj2) {

return [obj1 compare:obj2]; //升序

}];

_MMArr = [result copy];

NSString *name = _MMArr[row];

_mmArr = _dic[name];

[self.pickerView reloadComponent:1];

[self.pickerView reloadComponent:2];

[self.pickerView selectRow:0 inComponent:1 animated:YES];

[self.pickerView selectRow:0 inComponent:2 animated:YES];

_aStr = [NSString stringWithFormat:@"%@",_titleArr[row]];

_bStr = [NSString stringWithFormat:@"%02d",[_MMArr[0] intValue]];

_cStr = [NSString stringWithFormat:@"%02d",[_mmArr[0] intValue]];

} else if (component == 1) {

NSString *name = _MMArr[row];

_mmArr = _dic[name];

[self.pickerView reloadComponent:2];

_bStr = [NSString stringWithFormat:@"%02d",[_MMArr[row] intValue]];

_cStr = [NSString stringWithFormat:@"%02d",[_mmArr[0] intValue]];

[self.pickerView selectRow:0 inComponent:2 animated:YES];

} else {

_cStr = [NSString stringWithFormat:@"%02d",[_mmArr[row] intValue]];

}

}

//高度

-(CGFloat)pickerView:(UIPickerView *)pickerView rowHeightForComponent:(NSInteger)component{   

 return 40;

}

//监听

- (void)observeValueForKeyPath:(NSString *)keyPath ofObject:(id)object change:(NSDictionary*)change context:(void *)context {

if ([keyPath isEqualToString:@"nowDate"]) {

NSDate *date = [change objectForKey:NSKeyValueChangeNewKey];

NSDate *testDate = [NSDate dateWithTimeInterval:60*_leadTime sinceDate:date];

NSDateFormatter *df = [[NSDateFormatter alloc]init];

df.dateFormat = @"YYYY-MM-dd HH mm";

[df setLocale:[NSLocale currentLocale]];

NSString *dateStr = [df stringFromDate:testDate];

[self changeTimeWay:dateStr];

[self.pickerView reloadAllComponents];

[self.pickerView selectRow:0 inComponent:0 animated:YES];

[self.pickerView selectRow:0 inComponent:1 animated:YES];

[self.pickerView selectRow:0 inComponent:2 animated:YES];

}

}

- (void)changeTimeWay:(NSString *)dateStr {

NSMutableDictionary *bHHDic = [NSMutableDictionary dictionary];

NSMutableDictionary *HHDic = [NSMutableDictionary dictionary];

NSMutableArray *mmArr = [NSMutableArray array];

NSMutableArray *MMArr = [NSMutableArray array];

NSArray *dateArr = [dateStr componentsSeparatedByString:@" "];

_aStr = _aStr.length == 0?@"今天" : _aStr;

_bStr = _bStr.length == 0?[NSString stringWithFormat:@"%02d",[dateArr[1] intValue]] : _bStr;

_cStr = _cStr.length == 0?[NSString stringWithFormat:@"%02d",[dateArr[2] intValue]-[dateArr[2] intValue]%10] : _cStr;

for (int j = [dateArr[2] intValue]-[dateArr[2] intValue]%10; j < 60; j = j+_mintInterval) {

[MMArr addObject:[NSString stringWithFormat:@"%d",j]];

}

for (int j = 0; j < 60; j = j+_mintInterval) {

[mmArr addObject:[NSString stringWithFormat:@"%d",j]];

}

for (int i = [dateArr[1] intValue]; i < 24; i++) {

if (i == [dateArr[1] intValue]) {

[HHDic setObject:MMArr forKey:[NSString stringWithFormat:@"%02d",[dateArr[1] intValue]]];

} else {

[HHDic setObject:mmArr forKey:[NSString stringWithFormat:@"%02d",i]];

}

}

for (int i = 0; i < 24; i++) {

[bHHDic setValue:mmArr forKey:[NSString stringWithFormat:@"%02d",i]];

}

_dataDic = [NSMutableDictionary dictionaryWithCapacity:_titleArr.count];

for (int i = 0; i < _titleArr.count; i++) {

if (i == 0) {

[_dataDic setValue:HHDic forKey:[NSString stringWithFormat:@"%d",i]];

} else {

[_dataDic setValue:bHHDic forKey:[NSString stringWithFormat:@"%d",i]];

}

}

}

- (void)dealloc {

[self removeObserver:self forKeyPath:@"nowDate"];

}

@end

QLChangeTimeView下载地址:https://pan.baidu.com/s/1i4Aq7NR

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 202,607评论 5 476
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 85,047评论 2 379
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 149,496评论 0 335
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 54,405评论 1 273
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 63,400评论 5 364
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 48,479评论 1 281
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 37,883评论 3 395
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 36,535评论 0 256
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 40,743评论 1 295
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 35,544评论 2 319
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 37,612评论 1 329
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 33,309评论 4 318
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 38,881评论 3 306
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 29,891评论 0 19
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 31,136评论 1 259
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 42,783评论 2 349
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 42,316评论 2 342

推荐阅读更多精彩内容