UIDatePicker就是一个简单的UIPickerView
,今天想着给UIDatePicker增加一个按钮,在点击这个按钮之后,确定时间并隐藏,然后发现在UIDatePicker上加一个按钮,居然点击不响应,只会滚动时间。然后又试了下UIToolbar
,发现也是不响应点击事件,只是滚动时间。
网上的解决方案
百度了下,发现这个问题挺普遍的,然后发现几乎所有解决方案就是使用textField曲线救国,就是把inputView设置成datepicker,而不是键盘,这样实现
textField.inputAccessoryView = toolbar;
textField.inputView = datepicker;
这个在stackoverflow上面也是这么推荐的,但是这个解决方案就要把点击设置成textfield输入,太麻烦了,这种具体实现的方法看参考文章列表。
更简单的方法
搞不懂为什么都那么推荐改造textfield,其实只需要再加一个背景view就ok了。
声明一个view
@property (strong,nonatomic) UIView *m_pickerBGView;
@property (strong,nonatomic) UIDatePicker *m_datePicker;
然后把datepicker和button或者uitoolbar加到这个view上就行了
-(void)initLayoutView{
self.m_pickerBGView = [[UIView alloc] init];
[self.view addSubview:self.m_pickerBGView];
[self.m_pickerBGView mas_makeConstraints:^(MASConstraintMaker *make) {
make.width.equalTo(self.view);
make.bottom.equalTo(self.view);
make.height.equalTo(@(240));
}];
self.m_datePicker = [[UIDatePicker alloc] init];
[self.m_datePicker setDatePickerMode:UIDatePickerModeDate];
NSString *dateStr= @"1990-06-15";
NSString *minDateStr = @"1980-01-01";
NSString *maxDateStr = @"2017-12-31";
NSDateFormatter *dateFormatter = [[NSDateFormatter alloc] init] ;
[dateFormatter setDateFormat:@"yyyy-MM-dd"];
NSDate *date=[dateFormatter dateFromString:dateStr];
NSDate *minDate = [dateFormatter dateFromString:minDateStr];
NSDate *maxDate = [dateFormatter dateFromString:maxDateStr];
[self.m_datePicker setDate:date];
[self.m_datePicker setMinimumDate:minDate];
[self.m_datePicker setMaximumDate:maxDate];
[self.m_datePicker setBackgroundColor:[UIColor whiteColor]];
[self.m_pickerBGView addSubview:self.m_datePicker];
[self.m_datePicker mas_makeConstraints:^(MASConstraintMaker *make) {
make.width.equalTo(self.m_pickerBGView);
make.bottom.equalTo(self.m_pickerBGView);
make.top.equalTo(self.m_pickerBGView).with.offset(40);
}];
UIButton *button = [[UIButton alloc] init];
[button setBackgroundImage:[UIImage imageNamed:@"home_pic_btn_small"] forState:UIControlStateNormal];
[button setTitle:@"确定" forState:UIControlStateNormal];
[self.m_pickerBGView addSubview:button];
[button addTarget:self action:@selector(savebirthTime) forControlEvents:UIControlEventTouchUpInside];
[button mas_makeConstraints:^(MASConstraintMaker *make) {
make.top.equalTo(self.m_pickerBGView).with.offset(40);
make.right.equalTo(self.m_pickerBGView).with.offset(-20);
}];
}
-(void)savebirthTime{
NSLog(@"%@",self.m_datePicker.date);
[self.m_pickerBGView setHidden:true];
}
这样通过不同的区域就可以响应点击了。就达到了效果
参考文章
版权属于:东哥笔记 - DongGe.org
本文链接:https://dongge.org/blog/502.html
自2017年12月26日起,『转载以及大段采集进行后续编辑』须注明本文标题和链接!否则禁止所有转载和采集行为!