头文件:

@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

最新文章

  1. 最长回文子串-LeetCode 5 Longest Palindromic Substring
  2. Android 手机卫士--确认密码对话框编写
  3. CDN学习笔记二(技术详解)
  4. jquery中bind事件时的命名空间用法(转)
  5. Unity3D WP8发布解决方案名 DefaultPackageName 修改问题
  6. 258. Add Digits
  7. POJ3237-Tree (树链剖分,线段树区间更新+点更新+区间查询)
  8. GOOGLE------Reilly_Open_Source_Award
  9. vc6.0批量编译
  10. spring boot / cloud (十八) 使用docker快速搭建本地环境
  11. Y1吐槽001 怎么做产品
  12. union的特性,去重与不去重
  13. NowCoder -- 牛客小白月赛10
  14. ZOJ 3965 Binary Tree Restoring
  15. mysql 语句根据身份证查询年龄,地址,性别
  16. c#中在函数后紧跟=&gt;,几个意思,差点懵逼到没有朋友!
  17. &lt;数据结构系列1&gt;封装自己的数组——手写动态泛型数组(简化版ArrayList)
  18. Linux Shell sort排序常用命令(转载)
  19. windows下 git+tortoiseGit的使用【转】
  20. 使用info命令查看Redis信息和状态

热门文章

  1. 学术Essay写作中Introduction的正确打开方式
  2. 实验吧Web-难-貌似有点难(http头欺骗)
  3. Linux基础(1) 安装
  4. sqlcook sql经典实例 emp dept 创建语句
  5. Q1:Two Sum
  6. .NET CORE 配置Swagger文档
  7. 吴裕雄--天生自然MySQL学习笔记:MySQL 插入数据
  8. SQL基础教程(第2版)第4章 数据更新:练习题
  9. python学习笔记-模块和包
  10. UML-如何使用GRASP进行对象设计?