iOS 自定义时间选择器
2017-08-31 本文已影响0人
KingTortoise
前序
在阅读公司项目代码的时候发现使用到了五级的时间选择器,当时是使用一个UIDatePicker和一个两级的UIPickerView来实现的,但是在样式上还有点丑陋,所以我自己使用UIPickerView封装了一个五级的时间选择器。
效果展示
默认效果.gif 手动设置时间.gif 不可选择小于手动设置的时间.gif 设置最大最小时间.gif 手动设置时间和最大最小时间.gif相关属性
@interface PCDatePickerView : UIView
/**
* @property maximumDate: 最大值
*/
@property (nonatomic, strong) NSDate *maximumDate;
/**
* @property minimumDate: 最小值
*/
@property (nonatomic, strong) NSDate *minimumDate;
/**
* @property date: 用于手动设置时间
*/
@property (nonatomic, strong) NSDate *date;
/**
* @property doneAction: 用于回调
*/
@property (nonatomic, copy) ToolBarAction doneAction;
/**
* @property canChoicePastTime: 是否可以选择过去的时间 默认是NO(不可选)
*/
@property (nonatomic, assign) BOOL canChoicePastTime;
/**
* @property backGroundColor: 选择器背景颜色
*/
@property (nonatomic, strong) UIColor *backGroundColor;
/**
* 隐藏视图
*/
- (void)hide;
/**
* 显示视图
*/
- (void)showView;
@end
使用实例
@interface DPTestViewController ()
@property (weak, nonatomic) IBOutlet UILabel *dateLabel;
@property (weak, nonatomic) IBOutlet UITextField *yearTextField;
@property (weak, nonatomic) IBOutlet UITextField *monthTextField;
@property (weak, nonatomic) IBOutlet UITextField *dayTextField;
@property (weak, nonatomic) IBOutlet UITextField *hourTextField;
@property (weak, nonatomic) IBOutlet UITextField *minuteTextField;
@property (weak, nonatomic) IBOutlet UIButton *isSelectedBtn;
@property (weak, nonatomic) IBOutlet UITextField *minTimeTextField;
@property (weak, nonatomic) IBOutlet UITextField *maxTimeTextField;
@property (assign, nonatomic) BOOL isSelected;
@property (nonatomic, strong) PCDatePickerView *datePicker;
@end
@implementation DPTestViewController
- (void)viewDidLoad {
[super viewDidLoad];
[self setNavigationBarBackButton];
self.datePicker = [[PCDatePickerView alloc] init];
[self.view addSubview:self.datePicker];
__weak __typeof(&*self) weakSelf = self;
_datePicker.doneAction = ^(NSDate *date){
[weakSelf sureDatePickerView:date];
};
}
- (void)didReceiveMemoryWarning {
[super didReceiveMemoryWarning];
}
- (void)sureDatePickerView:(NSDate *)date
{
NSDateFormatter *dateFormatter = [[NSDateFormatter alloc] init];
[dateFormatter setDateFormat:@"yyyy-MM-dd HH:mm"];
NSString *strDate = [dateFormatter stringFromDate:date];
self.dateLabel.text = strDate;
}
- (IBAction)canSelectPastTimeAction:(id)sender {
[self.datePicker hide];
self.isSelected = !self.isSelected;
NSString *str = self.isSelected ? @"可选择":@"不可选择";
[self.isSelectedBtn setTitle:str forState:UIControlStateNormal];
}
- (IBAction)btnAction:(id)sender {
NSString *year = self.yearTextField.text;
NSString *month = self.monthTextField.text;
NSString *day = self.dayTextField.text;
NSString *hour = self.hourTextField.text;
NSString *minute = self.minuteTextField.text;
NSString *time = [NSString stringWithFormat:@"%@-%@-%@ %@:%@",year,month,day,hour,minute];
NSDateFormatter *dateFormatter = [[NSDateFormatter alloc] init];
[dateFormatter setDateFormat:@"yyyy-MM-dd HH:mm"];
NSDate *date = [dateFormatter dateFromString:time];
self.datePicker.date = date;
NSString *minTime = self.minTimeTextField.text;
NSDate *minDate = [dateFormatter dateFromString:minTime];
self.datePicker.minimumDate = minDate;
NSString *maxTime = self.maxTimeTextField.text;
NSDate *maxDate = [dateFormatter dateFromString:maxTime];
self.datePicker.maximumDate = maxDate;
self.datePicker.canChoicePastTime = self.isSelected;
[self.datePicker showView];
}
@end
结束语
该控件的使用还是比较的简单的,希望这篇文章给你有帮助。如果有需要的话,我会单独写一篇来分享我的思路。
欢迎来我的Github网址下载demo。