前序
在閱讀公司項目代碼的時候發(fā)現(xiàn)使用到了五級的時間選擇器应民,當時是使用一個UIDatePicker和一個兩級的UIPickerView來實現(xiàn)的侵蒙,但是在樣式上還有點丑陋洲脂,所以我自己使用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網(wǎng)址下載demo咖为。