zoukankan      html  css  js  c++  java
  • LGLDatePickerView

    这个是封装 系统的PickerView 使用也比较简单, gihub地址:https://github.com/liguoliangiOS/LGLDatePickerView.git

    效果图

    使用方法:

     [[LGLDatePickerView shareDatePiker] datePikerShowWithMode:LGLDatePickerModeDate];

        [[LGLDatePickerView shareDatePiker] dateCallBackSelectBlock:^(NSString *date) {

            NSLog(@"%@", date);

        }];

    上代码:

    LGLDatePickerView.h

    //
    //  LGLDatePickerView.h
    //  LGLProgress
    //
    //  Created by 李国良 on 2016/10/9.
    //  Copyright © 2016年 李国良. All rights reserved.
    //
    
    #import <Foundation/Foundation.h>
    
    
    typedef NS_ENUM(NSInteger, LGLDatePickerrMode) {
        LGLDatePickerModeTime,           // 选择时间
        LGLDatePickerModeDate,           // 日期
        LGLDatePickerModeDateAndTime,    // 日期和时间
        LGLDatePickerModeCountDownTimer, // 可以用于倒计时
    };
    
    /** 回调Block*/
    typedef void(^DateSelectBlock)(NSString * date);
    
    @interface LGLDatePickerView : NSObject
    
    @property (nonatomic, copy) DateSelectBlock block;
    + (instancetype)shareDatePiker;
    - (void)datePikerShowWithMode:(LGLDatePickerrMode)mode;
    - (void)dateCallBackSelectBlock:(DateSelectBlock)block;
    
    @end
    View Code

    LGLDatePickerView.m

    //
    //  LGLDatePickerView.m
    //  LGLProgress
    //
    //  Created by 李国良 on 2016/10/9.
    //  Copyright © 2016年 李国良. All rights reserved.
    //
    
    #import "LGLDatePickerView.h"
    #import "UIView+Frame.h"
    #define WIDTH [UIScreen mainScreen].bounds.size.width
    #define HEIGHT [UIScreen mainScreen].bounds.size.height
    
    @interface LGLDatePickerView ()
    
    @property (nonatomic, strong) UIView       * bgView;
    @property (nonatomic, strong) UIView       * dateView;
    @property (nonatomic, strong) UIDatePicker * datePicker;
    @property (nonatomic, copy)   NSString     * selectDate;
    
    @end
    
    @implementation LGLDatePickerView
    
        static id _instace;
    + (instancetype)shareDatePiker
    {
        static dispatch_once_t onceToken;
        dispatch_once(&onceToken, ^{// 只创建一次
            _instace = [[self alloc] init];
        });
        return _instace;
    }
    
    + (id)allocWithZone:(struct _NSZone *)zone
    {
        static dispatch_once_t onceToken;
        dispatch_once(&onceToken, ^{// 只初始化一次
            _instace = [super allocWithZone:zone];
        });
        return _instace;
    }
    
    - (id)copyWithZone:(NSZone *)zone
    {
        return _instace;
    }
    
    - (void)datePikerShowWithMode:(LGLDatePickerrMode)mode {
        if (!self.dateView) {
            self.dateView = [[UIView alloc] initWithFrame:CGRectMake(0, HEIGHT, WIDTH, 240)];
            self.dateView.userInteractionEnabled = YES;
            
    //  ============================= 添加分界线 =======================================================================
            UIView * lineView1 = [[UIView alloc] initWithFrame:CGRectMake(0, 0, WIDTH, 1)];
            lineView1.backgroundColor = [UIColor colorWithRed:0 green:0 blue:0 alpha:0.5];
            [self.dateView addSubview:lineView1];
            UIView * lineView = [[UIView alloc] initWithFrame:CGRectMake(0, 40, WIDTH, 1)];
            lineView.backgroundColor = [UIColor colorWithRed:0 green:0 blue:0 alpha:0.5];
            [self.dateView addSubview:lineView];
            
    
    //  =====================  添加确定取消按钮  =========================================================================
            UIButton * cancelBtn = [UIButton buttonWithType:UIButtonTypeCustom];
            cancelBtn.frame = CGRectMake(10, 5, 50, 30);
            [cancelBtn setTitle:@"取消" forState:UIControlStateNormal];
            [cancelBtn setTitleColor:[UIColor blackColor] forState:UIControlStateNormal];
            cancelBtn.userInteractionEnabled = YES;
            [cancelBtn addTarget:self action:@selector(cancelBtnclink) forControlEvents:UIControlEventTouchUpInside];
            [self.dateView addSubview:cancelBtn];
            
            UIButton * okBtn = [UIButton buttonWithType:UIButtonTypeCustom];
            okBtn.frame = CGRectMake(WIDTH - 60, 5, 50, 30);
            [okBtn setTitle:@"确定" forState:UIControlStateNormal];
            [okBtn setTitleColor:[UIColor blackColor] forState:UIControlStateNormal];
            [okBtn addTarget:self action:@selector(okBtnClink) forControlEvents:UIControlEventTouchUpInside];
            [self.dateView addSubview:okBtn];
            
    // ====================  初始化UIDatePicker,旋转滚动选择日期类  =======================================================
            self.datePicker = [[UIDatePicker alloc] initWithFrame:CGRectMake(0, 40, WIDTH, 200)];
            [self.datePicker setLocale:[[NSLocale alloc]initWithLocaleIdentifier:@"zh_CN"]];
            [self.datePicker setTimeZone:[NSTimeZone localTimeZone]];           // 设置时区
            [self.datePicker setDate:[NSDate date] animated:YES];               // 设置当前显示时间
            //[datePicker setMaximumDate:[NSDate date]];                        // 设置显示最大时间(此处为当前时间)最大和最小同时设置就不能选择未来的时间
            UIDatePickerMode  pikcerMode = (mode == LGLDatePickerModeDate) ? (UIDatePickerModeDate) : ((mode == LGLDatePickerModeDateAndTime) ? UIDatePickerModeDateAndTime : ((mode == LGLDatePickerModeTime) ? UIDatePickerModeTime : UIDatePickerModeCountDownTimer));
            [self.datePicker setDatePickerMode:pikcerMode];    // 设置UIDatePicker的显示模式
            [self.datePicker addTarget:self action:@selector(datePickerValueChanged:) forControlEvents:UIControlEventValueChanged];
            [self.dateView addSubview:self.datePicker];
            UIWindow * window = [UIApplication sharedApplication].keyWindow;
            [UIView animateWithDuration:0.5 animations:^{
                self.dateView.y = HEIGHT - 240;
            }];
            [window addSubview:self.dateView];
            self.selectDate = [self dateToStringWithDate:[NSDate date]];        // 防止用户不选择日期直接选择确定
        }
    }
    
    - (void)cancelBtnclink {
        [UIView animateWithDuration:0.5 animations:^{
            self.dateView.y = HEIGHT;
        }completion:^(BOOL finished) {
            [self.dateView removeFromSuperview];
             self.dateView = nil;
        }];
    }
    
    - (void)dateCallBackSelectBlock:(DateSelectBlock)block {
        self.block = block;
    }
    
    - (void)okBtnClink {
        self.block(self.selectDate);
        [self cancelBtnclink];
    }
    
    - (void)datePickerValueChanged:(UIDatePicker *)datepiker {
        self.selectDate = [self dateToStringWithDate:[datepiker date]];
    }
    
    - (NSString *)dateToStringWithDate:(NSDate *)selectDate {
        NSDateFormatter *selectDateFormatter = [[NSDateFormatter alloc] init];
        selectDateFormatter.dateFormat = @"yyyy-MM-dd HH:mm:ss"; // 设置时间和日期的格式
        NSString * dateAndTime = [selectDateFormatter stringFromDate:selectDate]; // 把date类型转为设置好格式的string类型
        return dateAndTime;
    }
                               
    @end
    View Code
    有兴趣的可以加入QQ群:457236811
  • 相关阅读:
    BZOJ1316 树上的询问
    BZOJ2599 IOI2011Race
    BZOJ2594 [Wc2006]水管局长数据加强版
    BZOJ3052 [wc2013] 糖果公园 【树上莫队】
    BZOJ4530 BJOI 2014 大融合
    QTREEⅠ SPOJ
    BZOJ 3514: Codechef MARCH14 GERALD07加强版 [LCT 主席树 kruskal]
    BZOJ3669 NOI2014魔法森林
    BZOJ2002 弹飞绵羊
    BZOJ1878 [SDOI2009]HH的项链
  • 原文地址:https://www.cnblogs.com/ljmaque/p/PickerView.html
Copyright © 2011-2022 走看看