zoukankan      html  css  js  c++  java
  • UIDatePicker封装

    #import <UIKit/UIKit.h>
    #import <objc/runtime.h>
    
    @protocol datePickerViewDelegate <NSObject>
    
    -(void)datePickerViewChoseTime:(NSString *)timeStr;
    
    @end
    
    @interface DatePickerView : UIView
    @property(nonatomic,strong)UIDatePicker *datePicker;
    @property(nonatomic,strong)UILabel *datePickerTimeLab;
    @property(nonatomic,strong)NSDate *selectDate;
    @property(nonatomic,assign)id<datePickerViewDelegate>delegate;
    @property(nonatomic,copy)void(^hideBlock)();// 隐藏时调用的block
    
    -(void)showDatePickerView;
    -(void)dismissDatePickerView;
    @end
    
    #import "DatePickerView.h"
    @interface DatePickerView ()
    {
        UIView *backView;
    }
    @end
    
    @implementation DatePickerView
    
    -(instancetype)initWithFrame:(CGRect)frame{
        self = [super initWithFrame:CGRectMake(0, 0, MAINSCROON_WIDTH, MAINSCROON_HEIGHT)];
        if(self){
            backView = [UIView new];
            [self addSubview:backView];
            backView.backgroundColor = [UIColor blackColor];
            backView.alpha = 0.25;
            [backView mas_makeConstraints:^(MASConstraintMaker *make) {
                make.size.equalTo(self);
                make.top.offset(0);
                make.left.offset(0);
            }];
            self.datePicker = [UIDatePicker new];
            NSLocale *locale = [[NSLocale alloc] initWithLocaleIdentifier:@"zh_CN"];//设置为中
            self.datePicker.locale = locale;
            self.datePicker.backgroundColor = [UIColor whiteColor];
            [self.datePicker setDatePickerMode:UIDatePickerModeDate];
            [self.datePicker addTarget:self action:@selector(dataValueChanged:) forControlEvents:UIControlEventValueChanged];
            [self addSubview:self.datePicker];
            [self.datePicker mas_makeConstraints:^(MASConstraintMaker *make) {
                make.centerX.equalTo(self.mas_centerX);
                make.bottom.offset(-(BOTTOM_HEIGHT));
                if([UIScreen mainScreen].bounds.size.width >= 720){
                    make.height.offset(320);
                }else{
                    make.height.offset(180);
                }
                make.width.equalTo(self.mas_width);
            }];
            
            UIView *topView = [UIView new];
            topView.backgroundColor = [UIColor whiteColor];
            [self addSubview:topView];
            [CreateUI addFrameWithBottomView:topView borderHeight:1.0f withBorderColor:BORDER_COLOR];
            [topView mas_makeConstraints:^(MASConstraintMaker *make) {
                make.bottom.equalTo(self.datePicker.mas_top).offset(0);
                make.width.equalTo(self.datePicker.mas_width);
                make.height.offset(34);
                make.left.offset(0);
            }];
            UILabel *choseLab = [UILabel new];
            choseLab.text = @"选择时间:";
            choseLab.font = [UIFont systemFontOfSize:14];
            [topView addSubview:choseLab];
            [choseLab mas_makeConstraints:^(MASConstraintMaker *make) {
                make.centerY.equalTo(topView.mas_centerY);
                make.left.offset(5);
            }];
            
            self.datePickerTimeLab = [UILabel new];
            self.datePickerTimeLab.font = [UIFont systemFontOfSize:14];
            [self dataValueChanged:self.datePicker];
            [topView addSubview:self.datePickerTimeLab];
            [self.datePickerTimeLab mas_makeConstraints:^(MASConstraintMaker *make) {
                make.centerY.equalTo(topView.mas_centerY);
                make.left.equalTo(choseLab.mas_right).offset(5);
            }];
    
            UIButton *sureBtn = [UIButton new];
            sureBtn.clipsToBounds = YES;
            sureBtn.layer.cornerRadius = 17;
            [sureBtn setTitle:@"确定" forState:UIControlStateNormal];
            [self addSubview:sureBtn];
            sureBtn.backgroundColor = [ImageService colorWithHexString:@"#12b7f5"];
            
            [sureBtn mas_makeConstraints:^(MASConstraintMaker *make) {
                make.bottom.equalTo(self.datePicker.mas_bottom).offset(-10);
                make.centerX.equalTo(self.datePicker.mas_centerX);
                make.height.offset(34);
                make.width.equalTo(self.datePicker.mas_width).multipliedBy(0.7);
            }];
            [sureBtn addTarget:self action:@selector(sureTimeBtnClick) forControlEvents:UIControlEventTouchUpInside];
        }
        return self;
    }
    -(void)sureTimeBtnClick{
        
        [_delegate datePickerViewChoseTime:self.datePickerTimeLab.text];
        
        [self dismissDatePickerView];
    }
    - (void) dataValueChanged:(UIDatePicker *)sender
    {
        UIDatePicker *dataPicker_one = (UIDatePicker *)sender;
        NSDate *date_one = dataPicker_one.date;
        NSDateFormatter *formatter = [[NSDateFormatter alloc] init];
        [formatter setDateFormat:@"yyyy-MM-dd"];
        self.datePickerTimeLab.text = [formatter stringFromDate:date_one];
    }
    -(void)setSelectDate:(NSDate *)selectDate{
        _selectDate = selectDate;
        self.datePicker.date = selectDate;
        NSDateFormatter *formatter = [[NSDateFormatter alloc] init];
        [formatter setDateFormat:@"yyyy-MM-dd"];
        self.datePickerTimeLab.text = [formatter stringFromDate:selectDate];
    }
    
    -(void)touchesBegan:(NSSet<UITouch *> *)touches withEvent:(UIEvent *)event{
        [self dismissDatePickerView];
    }
    
    -(void)showDatePickerView{
        UIWindow *window = [[[UIApplication sharedApplication]delegate]window];
        [window endEditing:YES];
        [window addSubview:self];
        self.alpha = 0;
        [UIView animateWithDuration:0.3 animations:^{
            self.alpha = 1;
        }];
    }
    -(void)dismissDatePickerView{
        if(self.hideBlock){
            self.hideBlock();
        }
        UIWindow *window = [[[UIApplication sharedApplication]delegate]window];
        [window addSubview:self];
        self.alpha = 1;
        [UIView animateWithDuration:0.3 animations:^{
            self.alpha = 0;
        } completion:^(BOOL finished) {
            [self removeFromSuperview];
        }];
        
    }
    
    @end
    

    使用:

    //懒加载
    -(DatePickerView *)datePickerView{
        if(!_datePickerView){
            _datePickerView = [DatePickerView new];
            _datePickerView.delegate =self;
            _datePickerView.datePicker.minimumDate = [NSDate date];
        }
        return _datePickerView;
    }
    //显示 如果设置默认日期可以这个 [self.datePickerView.datePicker setDate:[NSDate date]];
     [self.datePickerView showDatePickerView];
    
  • 相关阅读:
    iOS 图像渲染原理
    胶水语言
    关于事件处理
    redux有价值的文档
    redux沉思录
    详解JavaScript中的Object对象
    js 类型系统的核心:元类型、原型链与内省机制
    范畴、类型、复合、函数式编程
    js的类型系统--js基于原型的基石是所有对象最终都能够类型自证
    windows下查看dns缓存和刷新缓存
  • 原文地址:https://www.cnblogs.com/hualuoshuijia/p/9989853.html
Copyright © 2011-2022 走看看