UIDatePicker就是一个简单的UIPickerView,今天想着给UIDatePicker增加一个按钮,在点击这个按钮之后,确定时间并隐藏,然后发现在UIDatePicker上加一个按钮,居然点击不响应,只会滚动时间。然后又试了下UIToolbar,发现也是不响应点击事件,只是滚动时间。

屏幕快照 2017-03-01 20.35.16.png

网上的解决方案

百度了下,发现这个问题挺普遍的,然后发现几乎所有解决方案就是使用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];
}

这样通过不同的区域就可以响应点击了。就达到了效果

屏幕快照 2017-03-01 20.35.30.png

参考文章


☟☟可点击下方广告支持一下☟☟

最后修改:2017 年 03 月 01 日
请我喝杯可乐,请随意打赏: ☞已打赏列表