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(发邮件时,请将#更换为@)进行举报,并提供相关证据,一经查实,本站将立刻删除涉嫌侵权内容。