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
原文地址:https://www.cnblogs.com/ljmaque/p/PickerView.html