iOS 自定义只有年月的DatePikerView
2024-10-08 17:16:51
头文件:
@interface YearMonthPikerView : UIView @property (nonatomic,copy) void(^cancelBlock)(); @property (nonatomic,copy) void(^sureBlock)(NSString*,NSString*); @end
实现文件:
#import "YearMonthPikerView.h" static const int loop = ; @interface YearMonthPikerView()<UIPickerViewDelegate,UIPickerViewDataSource> @property (weak, nonatomic) IBOutlet UIButton *cancelBtn; @property (weak, nonatomic) IBOutlet UIButton *sureBtn; @property (weak, nonatomic) IBOutlet UIPickerView *ymPikerView; @property (nonatomic,strong) NSArray *monthsArr; //月份的数组 @property (nonatomic,strong) NSArray *yearsArr; //年份的数组 @property (nonatomic,strong) NSDateFormatter *formatter; @property (nonatomic,strong) NSString *currentYear; @property (nonatomic,strong) NSString *currentMonth; @property (nonatomic,assign) BOOL isCurrentYear; @property (nonatomic,strong) NSString *selectYear; @property (nonatomic,strong) NSString *selectMonth; @end @implementation YearMonthPikerView - (void)awakeFromNib{
[super awakeFromNib]; self.ymPikerView.delegate = self;
self.ymPikerView.dataSource = self; //初始化
self.monthsArr = @[@"",@"",@"",@"",@"",@"",@"",@"",@"",@"",@"",@""]; [self.formatter setLocale:[[NSLocale alloc] initWithLocaleIdentifier:@"zh_CN"] ];
NSDate *currentDate = [NSDate date]; [self.formatter setDateFormat:@"MM"];
self.currentMonth = [self.formatter stringFromDate:currentDate];
self.selectMonth = self.monthsArr[(self.currentMonth.integerValue-)]; [self.formatter setDateFormat:@"yyyy"];
self.currentYear = [self.formatter stringFromDate:currentDate];
self.selectYear = self.currentYear; NSMutableArray <NSString*>*yearsArr = [NSMutableArray array];
[yearsArr addObject:self.currentYear]; int nowYear = [self.currentYear intValue];
for (int i=; i<loop; i++) {
nowYear = nowYear - ;
NSString *nowYearStr = [NSString stringWithFormat:@"%d",nowYear];
[yearsArr insertObject:nowYearStr atIndex:];
}
self.yearsArr = yearsArr;
self.isCurrentYear = YES;
[self.ymPikerView selectRow:(self.yearsArr.count-) inComponent: animated:YES];
[self.ymPikerView selectRow:(self.currentMonth.intValue-) inComponent: animated:YES]; } - (NSInteger)numberOfComponentsInPickerView:(UIPickerView *)pickerView{
return 2.0;
} - (NSInteger)pickerView:(UIPickerView *)pickerView numberOfRowsInComponent:(NSInteger)component{
if (component==) {
return self.yearsArr.count;
}else if (component==){
if (self.isCurrentYear) {
return self.currentMonth.integerValue;
}else{
return self.monthsArr.count;
}
}else{
return ;
}
} - (NSString*)pickerView:(UIPickerView *)pickerView titleForRow:(NSInteger)row forComponent:(NSInteger)component{
if (component==) {
NSString *year = self.yearsArr[row];
year = [year stringByAppendingString:@"年"];
return year;
}else if (component==){
NSString *month = self.monthsArr[row];
month = [month stringByAppendingString:@"月"];
return month;
}else{
return nil;
}
} - (void)pickerView:(UIPickerView *)pickerView didSelectRow:(NSInteger)row inComponent:(NSInteger)component{
if (component== && row==self.yearsArr.count-) {
self.isCurrentYear = YES;
[self.ymPikerView reloadComponent:]; self.selectYear = self.yearsArr[row];
}else if (component==){
self.isCurrentYear = NO;
[self.ymPikerView reloadComponent:]; self.selectYear = self.yearsArr[row];
}else if (component==){
self.selectMonth = self.monthsArr[row];
}
} - (IBAction)cancelBtnClick:(UIButton *)sender {
if (self.cancelBlock) {
self.cancelBlock();
}
} - (IBAction)sureBtnClick:(UIButton *)sender {
if (self.sureBlock) {
self.sureBlock(self.selectYear, self.selectMonth);
}
} #pragma mark - 懒加载
- (NSDateFormatter*)formatter{
if (_formatter==nil) {
_formatter = [[NSDateFormatter alloc]init];
}
return _formatter;
} @end
效果如下图:
Demo地址如下:https://github.com/LuPing-Kuang/iOS-YearMonthPickerView
最新文章
- 最长回文子串-LeetCode 5 Longest Palindromic Substring
- Android 手机卫士--确认密码对话框编写
- CDN学习笔记二(技术详解)
- jquery中bind事件时的命名空间用法(转)
- Unity3D WP8发布解决方案名 DefaultPackageName 修改问题
- 258. Add Digits
- POJ3237-Tree (树链剖分,线段树区间更新+点更新+区间查询)
- GOOGLE------Reilly_Open_Source_Award
- vc6.0批量编译
- spring boot / cloud (十八) 使用docker快速搭建本地环境
- Y1吐槽001 怎么做产品
- union的特性,去重与不去重
- NowCoder -- 牛客小白月赛10
- ZOJ 3965 Binary Tree Restoring
- mysql 语句根据身份证查询年龄,地址,性别
- c#中在函数后紧跟=>;,几个意思,差点懵逼到没有朋友!
- <;数据结构系列1>;封装自己的数组——手写动态泛型数组(简化版ArrayList)
- Linux Shell sort排序常用命令(转载)
- windows下 git+tortoiseGit的使用【转】
- 使用info命令查看Redis信息和状态