cdts/xdts-ios 3/TreeHole/Code/Gategory/BRPickerView/DatePickerView/BRDatePickerView.h

275 lines
11 KiB
C
Raw Normal View History

2023-07-27 09:20:00 +08:00
//
// BRDatePickerView.h
// BRPickerViewDemo
//
// Created by renbo on 2017/8/11.
// Copyright © 2017 irenb. All rights reserved.
//
// 最新代码下载地址https://github.com/91renb/BRPickerView
#import "BRBaseView.h"
#import "NSDate+BRPickerView.h"
NS_ASSUME_NONNULL_BEGIN
/// 日期选择器格式
typedef NS_ENUM(NSInteger, BRDatePickerMode) {
// ----- 以下4种是系统样式兼容国际化日期格式 -----
/** 【yyyy-MM-dd】UIDatePickerModeDate美式日期MM-dd-yyyy英式日期dd-MM-yyyy*/
BRDatePickerModeDate,
/** 【yyyy-MM-dd HH:mm】 UIDatePickerModeDateAndTime */
BRDatePickerModeDateAndTime,
/** 【HH:mm】UIDatePickerModeTime */
BRDatePickerModeTime,
/** 【HH:mm】UIDatePickerModeCountDownTimer */
BRDatePickerModeCountDownTimer,
// ----- 以下14种是自定义样式 -----
/** 【yyyy-MM-dd HH:mm:ss】年月日时分秒 */
BRDatePickerModeYMDHMS,
/** 【yyyy-MM-dd HH:mm】年月日时分 */
BRDatePickerModeYMDHM,
/** 【yyyy-MM-dd HH】年月日时 */
BRDatePickerModeYMDH,
/** 【MM-dd HH:mm】月日时分 */
BRDatePickerModeMDHM,
/** 【yyyy-MM-dd】年月日兼容国际化日期dd-MM-yyyy*/
BRDatePickerModeYMD,
/** 【yyyy-MM】年月兼容国际化日期MM-yyyy*/
BRDatePickerModeYM,
/** 【yyyy】年 */
BRDatePickerModeY,
/** 【MM-dd】月日 */
BRDatePickerModeMD,
/** 【HH:mm:ss】时分秒 */
BRDatePickerModeHMS,
/** 【HH:mm】时分 */
BRDatePickerModeHM,
/** 【mm:ss】分秒 */
BRDatePickerModeMS,
/** 【yyyy-qq】年季度 */
BRDatePickerModeYQ,
/** 【yyyy-MM-ww】年月周 */
BRDatePickerModeYMW,
/** 【yyyy-ww】年周 */
BRDatePickerModeYW
};
/// 日期单位显示的位置
typedef NS_ENUM(NSInteger, BRShowUnitType) {
/** 日期单位显示全部行(默认)*/
BRShowUnitTypeAll,
/** 日期单位仅显示中间行 */
BRShowUnitTypeOnlyCenter,
/** 日期单位不显示(隐藏日期单位)*/
BRShowUnitTypeNone
};
typedef void (^BRDateResultBlock)(NSDate * _Nullable selectDate, NSString * _Nullable selectValue);
typedef void (^BRDateResultRangeBlock)(NSDate * _Nullable selectStartDate, NSDate * _Nullable selectEndDate, NSString * _Nullable selectValue);
@interface BRDatePickerView : BRBaseView
/**
//////////////////////////////////////////////////////////////////////////
///
/// 【用法一】
/// 特点:灵活,扩展性强(推荐使用!)
///
////////////////////////////////////////////////////////////////////////*/
/** 日期选择器显示类型 */
@property (nonatomic, assign) BRDatePickerMode pickerMode;
/** 设置选中的日期(推荐使用 selectDate */
@property (nullable, nonatomic, strong) NSDate *selectDate;
@property (nullable, nonatomic, copy) NSString *selectValue;
/** 最小日期(可使用 NSDate+BRPickerView 分类中对应的方法进行创建)*/
@property (nullable, nonatomic, strong) NSDate *minDate;
/** 最大日期(可使用 NSDate+BRPickerView 分类中对应的方法进行创建)*/
@property (nullable, nonatomic, strong) NSDate *maxDate;
/** 选择结果的回调 */
@property (nullable, nonatomic, copy) BRDateResultBlock resultBlock;
/** 选择结果范围的回调for `BRDatePickerModeYQ`、`BRDatePickerModeYMW`、`BRDatePickerModeYW`, ignored otherwise. */
@property (nullable, nonatomic, copy) BRDateResultRangeBlock resultRangeBlock;
/** 滚动选择时触发的回调 */
@property (nullable, nonatomic, copy) BRDateResultBlock changeBlock;
/** 滚动选择范围时触发的回调for `BRDatePickerModeYQ`、`BRDatePickerModeYMW`、`BRDatePickerModeYW`, ignored otherwise. */
@property (nullable, nonatomic, copy) BRDateResultRangeBlock changeRangeBlock;
/** 日期单位显示类型 */
@property (nonatomic, assign) BRShowUnitType showUnitType;
/** 是否显示【星期】,默认为 NO */
@property (nonatomic, assign, getter=isShowWeek) BOOL showWeek;
/** 是否显示【今天】,默认为 NO */
@property (nonatomic, assign, getter=isShowToday) BOOL showToday;
/** 是否添加【至今】,默认为 NO */
@property (nonatomic, assign, getter=isAddToNow) BOOL addToNow;
/** 首行添加【自定义字符串】,配合 selectValue 可设置默认选中 */
@property (nullable, nonatomic, copy) NSString *firstRowContent;
/** 末行添加【自定义字符串】,配合 selectValue 可设置默认选中 */
@property (nullable, nonatomic, copy) NSString *lastRowContent;
/** 最后一行,添加【自定义字符串】 */
@property (nullable, nonatomic, copy) NSString *addCustomString DEPRECATED_MSG_ATTRIBUTE("Use 'lastRowContent' instead");
/** 滚轮上日期数据排序是否降序,默认为 NO升序*/
@property (nonatomic, assign, getter=isDescending) BOOL descending;
/** 选择器上数字是否带有前导零,默认为 NO无前导零:2020-1-1有前导零:2020-01-01*/
@property (nonatomic, assign, getter=isNumberFullName) BOOL numberFullName;
/** 设置分的时间间隔默认为1范围1 ~ 30*/
@property (nonatomic, assign) NSInteger minuteInterval;
/** 设置秒的时间间隔默认为1范围1 ~ 30*/
@property (nonatomic, assign) NSInteger secondInterval;
/** 设置倒计时的时长默认为0范围0 ~ 24*60*60-1单位为秒 for `BRDatePickerModeCountDownTimer`, ignored otherwise. */
@property (nonatomic, assign) NSTimeInterval countDownDuration;
/**
*
* @[@"1月", @"2月",..., @"12月"] @[@"一月", @"二月",..., @"十二月"] @[@"Jan", @"Feb",..., @"Dec"]
*/
@property (nonatomic, copy) NSArray <NSString *> *monthNames;
/**
* () NOfor `BRDatePickerModeYMD` and `BRDatePickerModeYM`, ignored otherwise.
* January Jan
*/
@property (nonatomic, assign, getter=isShortMonthName) BOOL shortMonthName;
/**
*
* @{@"year": @"", @"month": @"", @"day": @"", @"hour": @"", @"minute": @"", @"second": @""}
*/
@property (nonatomic, copy) NSDictionary *customUnit;
/** 显示上午和下午,默认为 NO. for `BRDatePickerModeYMDH`, ignored otherwise. */
@property (nonatomic, assign, getter=isShowAMAndPM) BOOL showAMAndPM;
/** 设置时区,默认为当前时区 */
@property (nullable, nonatomic, copy) NSTimeZone *timeZone;
/** default is [NSCalendar currentCalendar]. setting nil returns to default. for `UIDatePicker` */
@property (nonatomic, copy) NSCalendar *calendar;
/** 指定不允许选择的日期 */
@property (nullable, nonatomic, copy) NSArray <NSDate *> *nonSelectableDates;
/** 不允许选择日期的回调 */
@property (nullable, nonatomic, copy) BRDateResultBlock nonSelectableBlock;
/// 初始化日期选择器
/// @param pickerMode 日期选择器显示类型
- (instancetype)initWithPickerMode:(BRDatePickerMode)pickerMode;
/// 弹出选择器视图
- (void)show;
/// 关闭选择器视图
- (void)dismiss;
//================================================= 华丽的分割线 =================================================
/**
//////////////////////////////////////////////////////////////////////////
///
/// 【用法二】:快捷使用,直接选择下面其中的一个方法进行使用
/// 特点:快捷,方便
///
////////////////////////////////////////////////////////////////////////*/
/**
* 1.
*
* @param mode
* @param title
* @param selectValue
* @param resultBlock
*
*/
+ (void)showDatePickerWithMode:(BRDatePickerMode)mode
title:(nullable NSString *)title
selectValue:(nullable NSString *)selectValue
resultBlock:(nullable BRDateResultBlock)resultBlock;
/**
* 2.
*
* @param mode
* @param title
* @param selectValue
* @param isAutoSelect NO
* @param resultBlock
*
*/
+ (void)showDatePickerWithMode:(BRDatePickerMode)mode
title:(nullable NSString *)title
selectValue:(nullable NSString *)selectValue
isAutoSelect:(BOOL)isAutoSelect
resultBlock:(nullable BRDateResultBlock)resultBlock;
/**
* 3.
*
* @param mode
* @param title
* @param selectValue
* @param minDate 使 NSDate+BRPickerView
* @param maxDate 使 NSDate+BRPickerView
* @param isAutoSelect NO
* @param resultBlock
*
*/
+ (void)showDatePickerWithMode:(BRDatePickerMode)mode
title:(nullable NSString *)title
selectValue:(nullable NSString *)selectValue
minDate:(nullable NSDate *)minDate
maxDate:(nullable NSDate *)maxDate
isAutoSelect:(BOOL)isAutoSelect
resultBlock:(nullable BRDateResultBlock)resultBlock;
/**
* 3.
*
* @param mode
* @param title
* @param selectValue
* @param minDate 使 NSDate+BRPickerView
* @param maxDate 使 NSDate+BRPickerView
* @param isAutoSelect NO
* @param resultBlock
* @param resultRangeBlock
*
*/
+ (void)showDatePickerWithMode:(BRDatePickerMode)mode
title:(nullable NSString *)title
selectValue:(nullable NSString *)selectValue
minDate:(nullable NSDate *)minDate
maxDate:(nullable NSDate *)maxDate
isAutoSelect:(BOOL)isAutoSelect
resultBlock:(nullable BRDateResultBlock)resultBlock
resultRangeBlock:(nullable BRDateResultRangeBlock)resultRangeBlock;
@end
NS_ASSUME_NONNULL_END