iOS自定义日期选择器
前言
封装了一个日期选择器,解决两个问题:
1、点击textField,键盘弹出和日期选择器弹出的逻辑处理;
2、同一个界面需要多次用到日期选择器时,判断点击的textField;
一、封装日期选择器类YCDatePickerView
1、新建一个类,基于UIView,取名YCDatePickerView。
2、YCDatePickerView类中.h文件代码如下:
typedefvoid(^MyBasicBlock)(idresult); #import@interfaceYCDatePickerView:UIView @property(nonatomic,strong)UIButton*btnConfirm; @property(nonatomic,strong)UIButton*btnCancel; @property(nonatomic,strong)UIDatePicker*datePicker; @property(nonatomic,copy)MyBasicBlockselectBlock; +(YCDatePickerView*)datePickerViewWithMode:(UIDatePickerMode)datePickerModebolck:(MyBasicBlock)block; @end
3、YCDatePickerView类中.m文件代码如下:
#defineSCREEN_WIDTH[[UIScreenmainScreen]bounds].size.width #defineSCREEN_HEIGHT[[UIScreenmainScreen]bounds].size.height #definekTopBarViewHeight40 #definekButton_Width40 #definekButton_Height40 #definekDatePicker_Height256 #import"YCDatePickerView.h" @implementationYCDatePickerView -(id)initWithFrame:(CGRect)frame { self=[superinitWithFrame:frame]; if(self){ UIView*topBarView=[[UIViewalloc]initWithFrame:CGRectMake(0,0,self.frame.size.width,kTopBarViewHeight)]; topBarView.backgroundColor=[UIColororangeColor]; [selfaddSubview:topBarView]; _btnConfirm=[[UIButtonalloc]initWithFrame:CGRectMake(self.frame.size.width-kButton_Width-10,0,kButton_Width,kButton_Height)]; [_btnConfirmaddTarget:selfaction:@selector(btnConfirm:)forControlEvents:UIControlEventTouchUpInside]; [_btnConfirmsetTitle:@"确定"forState:UIControlStateNormal]; [topBarViewaddSubview:_btnConfirm]; _btnCancel=[[UIButtonalloc]initWithFrame:CGRectMake(10,0,kButton_Width,kButton_Height)]; [_btnCanceladdTarget:selfaction:@selector(btnCancel:)forControlEvents:UIControlEventTouchUpInside]; [_btnCancelsetTitle:@"取消"forState:UIControlStateNormal]; [topBarViewaddSubview:_btnCancel]; _datePicker=[[UIDatePickeralloc]initWithFrame:CGRectMake(0,CGRectGetMaxY(topBarView.frame),self.frame.size.width,self.frame.size.height-kTopBarViewHeight)]; _datePicker.backgroundColor=[UIColorwhiteColor]; [selfaddSubview:_datePicker]; } returnself; } -(void)btnConfirm:(id)sender { if(self.selectBlock){ self.selectBlock(self.datePicker.date); } } -(void)btnCancel:(id)sender { if(self.selectBlock){ self.selectBlock(nil); } } +(YCDatePickerView*)datePickerViewWithMode:(UIDatePickerMode)datePickerModebolck:(MyBasicBlock)block { YCDatePickerView*picker=[[YCDatePickerViewalloc]initWithFrame:CGRectMake(0,0,SCREEN_WIDTH,kDatePicker_Height)]; picker.datePicker.datePickerMode=datePickerMode; picker.selectBlock=block; returnpicker; } @end
二、YCDatePickerView的使用
1、在ViewController中导入头文件
#import"YCDatePickerView.h"
2、在ViewController.m中添加如下代码
#defineSCREEN_WIDTH[[UIScreenmainScreen]bounds].size.width #defineSCREEN_HEIGHT[[UIScreenmainScreen]bounds].size.height #import"ViewController.h" #import"YCDatePickerView.h" @interfaceViewController() @property(retain,nonatomic)YCDatePickerView*datePicker; @end @implementationViewController -(void)viewDidLoad{ [superviewDidLoad]; UITextField*begin=[[UITextFieldalloc]initWithFrame:CGRectMake(10,70,SCREEN_WIDTH-20,30)]; begin.placeholder=@"请输入开始时间"; begin.borderStyle=UITextBorderStyleRoundedRect; [self.viewaddSubview:begin]; __weakViewController*weakself=self; begin.inputView=[YCDatePickerViewdatePickerViewWithMode:UIDatePickerModeDate bolck:^(NSDate*result){ if(result){ begin.text=[weakselfdateToString:result]; } [beginresignFirstResponder]; }]; UITextField*end=[[UITextFieldalloc]initWithFrame:CGRectMake(10,120,SCREEN_WIDTH-20,30)]; end.placeholder=@"请输入结束时间"; end.borderStyle=UITextBorderStyleRoundedRect; [self.viewaddSubview:end]; end.inputView=[YCDatePickerViewdatePickerViewWithMode:UIDatePickerModeDate bolck:^(NSDate*result){ if(result){ end.text=[weakselfdateToString:result]; } [endresignFirstResponder]; }]; } //日期转为字符串 -(NSString*)dateToString:(NSDate*)date { NSDateFormatter*dateFormatter=[[NSDateFormatteralloc]init]; [dateFormattersetDateFormat:@"yyyy-MM-ddHH:mm:ss"]; NSString*strDate=[dateFormatterstringFromDate:date]; returnstrDate; } @end
三、效果图
以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持毛票票。
声明:本文内容来源于网络,版权归原作者所有,内容由互联网用户自发贡献自行上传,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任。如果您发现有涉嫌版权的内容,欢迎发送邮件至:czq8825#qq.com(发邮件时,请将#更换为@)进行举报,并提供相关证据,一经查实,本站将立刻删除涉嫌侵权内容。