LYSDatePicker
当前最高版本:0.0.3
LYSDatePicker 主要用于适应日常开发中需要选择日期的场景。底层主要使用了 UIPickerView 和 UIDatePicker 组件。由于刚刚发布,可能在使用过程中存在一些错误,如发现可反馈,我将尝试修复。
使用方法:(目前支持 iOS 8.0 以上)
事实上,我没有在 iOS 8.0 以下进行过测试,自我认为应该没有使用 iOS 8 之前和之后有变动的 API,但是我在集成 Cocoapods 时,选的支持环境是 iOS 8 以上,如果要在 iOS 8 以下使用,可以直接将文件复制到项目中
为了方便大家引入,我加入了 Cocoapods 管理,使用终端 pod search LYSDatePicker
一般情况下,会查到以下内容
-> LYSDatePicker (版本号)
I hope everyone will give me some advice during the process of use. I want to
go further.
pod 'LYSDatePicker', '~> 版本号'
- Homepage: https://github.com/LIYANGSHUAI/LYSDatePicker
- Source: https://github.com/LIYANGSHUAI/LYSDatePicker.git
- Versions: 版本列表 [master repo]
(END)
直接粘贴:pod 'LYSDatePicker', '~> 版本号'
以下是我考虑到的尽可能多的使用场景,供参考
LYSDatePicker *pickerView = [[LYSDatePicker alloc] initWithFrame:CGRectMake(0, 100, CGRectGetWidth(self.view.frame), 256) type:(LYSDatePickerTypeSystem)];
pickerView.datePickerMode = LYSDatePickerModeTime;
pickerView.date = [NSDate date];
pickerView.headerView.headerBar = self.headerBar;
pickerView.delegate = self;
pickerView.dataSource = self;
[self.view addSubview:pickerView];
LYSDatePicker *pickerView = [[LYSDatePicker alloc] initWithFrame:CGRectMake(0, 100, CGRectGetWidth(self.view.frame), 256) type:(LYSDatePickerTypeCustom)];
pickerView.datePickerMode = LYSDatePickerModeTime;
pickerView.date = [NSDate date];
pickerView.headerView.headerBar = self.headerBar;
pickerView.delegate = self;
pickerView.dataSource = self;
[self.view addSubview:pickerView];
LYSDatePicker *pickerView = [[LYSDatePicker alloc] initWithFrame:CGRectMake(0, 100, CGRectGetWidth(self.view.frame), 256) type:(LYSDatePickerTypeCustom)];
pickerView.datePickerMode = LYSDatePickerModeTime;
pickerView.hourStandard = LYSDatePickerStandard12Hour;
pickerView.date = [NSDate date];
LYSDateHeaderBarItem *cancelItem = [[LYSDateHeaderBarItem alloc] initWithImage:[UIImage imageNamed:@"cancel"] target:self action:@selector(cancelAction:)];
cancelItem.tintColor = [UIColor whiteColor];
LYSDateHeaderBarItem *commitItem = [[LYSDateHeaderBarItem alloc] initWithImage:[UIImage imageNamed:@"fit"] target:self action:@selector(commitAction:)];
commitItem.tintColor = [UIColor whiteColor];
self.headerBar = [[LYSDateHeaderBar alloc] init];
self.headerBar.leftBarItem = cancelItem;
self.headerBar.rightBarItem = commitItem;
self.headerBar.title = @"日期选择器";
self.headerBar.titleColor = [UIColor whiteColor];
pickerView.headerView.headerBar = self.headerBar;
pickerView.delegate = self;
pickerView.dataSource = self;
[self.view addSubview:pickerView];
大致使用方法如上所述,大家可以通过下面的四个枚举值进行不同场景适配
@property (nonatomic, assign) LYSDatePickerType type;
@property (nonatomic, assign) LYSDatePickerMode datePickerMode;
@property (nonatomic, assign) LYSDatePickerWeekDayType weekDayType;
@property (nonatomic, assign) LYSDatePickerStandard hourStandard;
当遇到屏幕宽度不能完全显示组件时,可以实现如下代理
/// Follow the LYSDatePickerViewDelegate protocol to control the layout of higher date selectors
@protocol LYSDatePickerDelegate<NSObject>
@optional
- (CGFloat)datePicker:(LYSDatePicker *)pickerView componentWidthOfIndex:(NSInteger)index;
@end
当然还有另一个方法可以解决不完全显示的问题
@property (nonatomic,strong) UIFont *labelFont;
可以通过设置显示字体大小,间接调整显示范围,因为部分实现源码如下
- (CGFloat)pickerView:(UIPickerView *)pickerView widthForComponent:(NSInteger)component
{
if (self.delegate && [self.delegate respondsToSelector:@selector(datePicker:componentWidthOfIndex:)]) {
return [self.delegate datePicker:self componentWidthOfIndex:component];
}
CGFloat fontSize = self.labelFont.pointSize;
CGFloat year = 50*fontSize/14;
CGFloat month = 35*fontSize/14;
CGFloat hour = 40*fontSize/14;
CGFloat minute = 40*fontSize/14;
CGFloat timeType = 30*fontSize/14;
CGFloat day = 80*fontSize/14;
MatchWeekDayType(None, day = 60*fontSize/14;)
MatchWeekDayType(WeekdaySymbols, day = 80*fontSize/14;)
MatchWeekDayType(ShortWeekdaySymbols, day = 70*fontSize/14;)
MatchWeekDayType(VeryShortWeekdaySymbols, day = 60*fontSize/14;)
MatchWeekDayType(Custom, day = 80*fontSize/14;)
MatchDatePickerMode(Time, {
Match(component == 0, {return hour;})
Match(component == 1, {return minute;})
Match(component == 2, {return timeType;})
})
MatchDatePickerMode(Date, {
Match(component == 0, {return month;})
Match(component == 1, {return day;})
})
MatchDatePickerMode(DateAndTime, {
Match(component == 0, {return month;})
Match(component == 1, {return day;})
Match(component == 2, {return hour;})
Match(component == 3, {return minute;})
Match(component == 4, {return timeType;})
})
MatchDatePickerMode(YearAndDate, {
Match(component == 0, {return year;})
Match(component == 1, {return month;})
Match(component == 2, {return day;})
})
MatchDatePickerMode(YearAndDateAndTime, {
Match(component == 0, {return year;})
Match(component == 1, {return month;})
Match(component == 2, {return day;})
Match(component == 3, {return hour;})
Match(component == 4, {return minute;})
Match(component == 5, {return timeType;})
})
return 45;
}
我是测试在 iPhone 5s 4.0 手机屏幕下,以14号字体作为参考