日期选择器UIDatePicker

在写日期选择器之前  我们必须准备几个成员变量(至少要下面几个)  

UIToolbar *mToolBar;    //工具栏

UIDatePicker *mDatePickerView;  //日期的View

UIPickerView *mPickerView;   //日期+ToolBarView

UITextField *_responseTextField; //保存当前的TextField  用于取消第一响应

NSArray *pickerViewDataSourse;   //数据源

UITextField *mTextField;  //当前的文本输入框  点击选择日期

成员变量定义好之后  我一般是在ViewDidLoad中掉两个方法  一个是加载UI  另外一个是加载选择器  代码如下   (这段代码我加了个Label作为成为变量  可直接编译)

- (void)viewDidLoad {

    [superviewDidLoad];

    self.view.backgroundColor = [UIColorgrayColor];

    [self initUi];

    [selfsetPickerView];

}

- (void)initUi

{

    UIView *back = [[UIViewalloc]initWithFrame:CGRectMake(0,0,self.view.frame.size.width,self.view.frame.size.height-20)];

    back.backgroundColor = [UIColorcyanColor];

    

    _mTitleLabel = [[UILabelalloc]initWithFrame:CGRectMake(15,105, 60,30)];

    _mTitleLabel.textAlignment =NSTextAlignmentRight;

    _mTitleLabel.text =@"helloWorld";

    _mTitleLabel.backgroundColor = [UIColorclearColor];

    _mTitleLabel.font = [UIFontsystemFontOfSize:15];

    _mTitleLabel.adjustsFontSizeToFitWidth=YES;


    _mTextField = [[UITextFieldalloc]initWithFrame:CGRectMake(75,105, 150,30)];

    _mTextField.backgroundColor = [UIColorclearColor];

    _mTextField.returnKeyType =UIReturnKeyDone;

    _mTextField.borderStyle =UITextBorderStyleRoundedRect;

    _mTextField.font = [UIFontsystemFontOfSize:15];

    _mTextField.contentVerticalAlignment =UIControlContentVerticalAlignmentCenter;

    _mTextField.delegate =self;

    

    [self.view addSubview:back];

    [self.viewaddSubview:_mTitleLabel];

    [self.viewaddSubview:_mTextField];

   }

- (void)setPickerView

{

    self.mPickerView = [[UIPickerViewalloc] init];

    _mPickerView.dataSource =self;

    _mPickerView.delegate =self;

    

    

    self.mToolBar = [[UIToolbaralloc] initWithFrame:CGRectMake(0,0, self.view.frame.size.width,40)];

    _mToolBar.barStyle =UIBarStyleDefault;

    

    UIBarButtonItem *done = [[UIBarButtonItemalloc] initWithTitle:@"完成"style:UIBarButtonItemStyleDone target:self action:@selector(doneAction:)];

    UIBarButtonItem *fexible = [[UIBarButtonItemalloc] initWithBarButtonSystemItem:UIBarButtonSystemItemFlexibleSpacetarget:selfaction:nil];

    UIBarButtonItem *cancel = [[UIBarButtonItemalloc] initWithTitle:@"取消"style:UIBarButtonItemStyleDone target:self action:@selector(cancelAction:)];

    _mToolBar.items = [NSArrayarrayWithObjects:cancel, fexible, done, nil];

    

    

    self.mTextField.inputView =_mPickerView;

    self.mTextField.inputAccessoryView =_mToolBar;


    

    _mDatePickerView = [[UIDatePickeralloc]initWithFrame:CGRectMake(0, [UIScreenmainScreen].bounds.size.height -216,self.view.frame.size.height,216)];

    _mDatePickerView.backgroundColor = [UIColormagentaColor];

    _mDatePickerView.datePickerMode =UIDatePickerModeDate;

        

    //定义最小日期

    NSDateFormatter *formatter_minDate = [[NSDateFormatteralloc]init];

    [formatter_minDate setDateFormat:@"yyyy-MM-dd"];

    NSDate *minDate = [formatter_minDate dateFromString:@"1900-01-01"];

    formatter_minDate = nil;

    

    //最大日期是今天

    NSDate *maxDate = [NSDatedate];

    [_mDatePickerView setMinimumDate:minDate];

    [_mDatePickerView setMaximumDate:maxDate];


    _mPickerView = [[UIPickerViewalloc] initWithFrame:CGRectMake(0,self.view.frame.size.height-216-40,self.view.frame.size.width,216)];

    _mPickerView.delegate =self;

    _mPickerView.backgroundColor = [UIColormagentaColor];

    _mPickerView.dataSource =self;

    _mPickerView.showsSelectionIndicator =YES;


   


    

    NSDateFormatter *formatter = [[NSDateFormatterallocinit];

    [formatter setDateFormat:@"yyyy-MM-dd"];

    /* NSDate *date_one = [NSDatedate];

     _mTextField.text = [formatterstringFromDate:date_one];  */

这样会有8小时的时差  

应改为  :

   NSDate *date = [NSDate date];

    NSTimeZone *zone = [NSTimeZone systemTimeZone];

    NSInteger interval = [zone secondsFromGMTForDate: date];

   NSDate *nowDate = [date  dateByAddingTimeInterval: interval];    

    _mTextField.text = [formatter stringFromDate:nowDate];


    formatter = nil;


     _mTextField.inputAccessoryView =_mToolBar;

    _mTextField.inputView =_mDatePickerView;

}

- (void)doneAction:(UIBarButtonItem *)btn

{

    NSDate *date_one =_mDatePickerView.date;

    NSDateFormatter *formatter = [[NSDateFormatteralloc] init];

    [formatter setDateFormat:@"yyyy-MM-dd"];

    _mTextField.text = [formatterstringFromDate:date_one];

    formatter = nil;

    

    [_responseField resignFirstResponder];

}

- (void)cancelAction:(UIBarButtonItem *)btn

{

    [_responseField resignFirstResponder];

}

-(void)textFieldDidBeginEditing:(UITextField *)textField

{

    _responseField = textField;

    

}

- (void)textFieldDidEndEditing:(UITextField *)textField

{

    [_responseField resignFirstResponder];

}

#pragma mark -------pickerView-----Dalegate------

- (CGFloat)pickerView:(UIPickerView *)pickerView widthForComponent:(NSInteger)component

{

    returnself.view.frame.size.width;

}

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

{

    return 40;

}

- (NSString *)pickerView:(UIPickerView *)pickerView titleForRow:(NSInteger)row forComponent:(NSInteger)component

{

    return [_pickerViewDataSourseobjectAtIndex:row];

}

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

{

    return_pickerViewDataSourse.count;

}


#pragma mark  ----DataSource

- (NSInteger)numberOfComponentsInPickerView:(UIPickerView *)pickerView

{

    return 1;

}


代码大致说一下   toolBar上又两个功能按钮   一个是完成  另外一个是取消  点击TextField会弹出日期选择器  选择好只好  点击完成(可选定选择好的日期) 取消第一响应 

数据 都是通过数据源提供的  可是是本地的plist文件  可以使自带的日期  可以使自己在代码中写的 等等  TextField的两个代理方法  我一般是用来管理第一响应的  感觉比较方便

好了  不扯了  具体的都在code中表现出来了   自己看吧



编译效果如下图
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值