头文件:

@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

iOS 自定义只有年月的DatePikerView的更多相关文章

  1. 【iOS自定义键盘及键盘切换】详解

    [iOS自定义键盘]详解 实现效果展示: 一.实现的协议方法代码 #import <UIKit/UIKit.h> //创建自定义键盘协议 @protocol XFG_KeyBoardDel ...

  2. iOS自定义的UISwitch按钮

    UISwitch开关控件 开关代替了点选框.开关是到目前为止用起来最简单的控件,不过仍然可以作一定程度的定制化. 一.创建 UISwitch* mySwitch = [[ UISwitchalloc] ...

  3. 如何实现 iOS 自定义状态栏

    给大家介绍如何实现 iOS 自定义状态栏 Sample Code: 01 UIWindow * statusWindow = [[UIWindow alloc] initWithFrame:[UIAp ...

  4. iOS自定义组与组之间的距离以及视图

    iOS自定义组与组之间的距离以及视图 //头视图高度 - (CGFloat)tableView:(UITableView *)tableView heightForHeaderInSection:(N ...

  5. iOS 自定义转场动画

    代码地址如下:http://www.demodashi.com/demo/12955.html 一.总效果 本文记录分享下自定义转场动画的实现方法,具体到动画效果:新浪微博图集浏览转场效果.手势过渡动 ...

  6. iOS 自定义转场动画浅谈

    代码地址如下:http://www.demodashi.com/demo/11612.html 路漫漫其修远兮,吾将上下而求索 前记 想研究自定义转场动画很久了,时间就像海绵,挤一挤还是有的,花了差不 ...

  7. iOS自定义转场动画实战讲解

    iOS自定义转场动画实战讲解   转场动画这事,说简单也简单,可以通过presentViewController:animated:completion:和dismissViewControllerA ...

  8. WPF自定义选择年月控件详解

    本文实例为大家分享了WPF自定义选择年月控件的具体代码,供大家参考,具体内容如下 封装了一个选择年月的控件,XAML代码: 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 ...

  9. IOS自定义表格UITableViewCell

    在UITableView中,自定义表格,最原始是继承UITableViewCell,然后通过写代码方式去搞,但是这个费事了. 1.在storyboard中 给一个ViewController的tabi ...

随机推荐

  1. Codeforces_448C 分治

    昨晚CF碰到的题目,昨晚CF跪了啊啊啊 题意比较简单,给定一排挨在一起的板子,宽度都为1,高度不一,一个刷子宽度也是1,可以横着刷,也可以竖着刷,但是任何时刻刷子都要在板子上,也就是说,如果横向的时候 ...

  2. tomcat的8080,8009,8443,8005都是什么端口

    <Server port="8005" shutdown="SHUTDOWN"> 远程停服务端口<Connector port="8 ...

  3. 给指定的div增加滚动条

    这次的需求是给一个指定的div(里面有个table表格)增加上下.左右的滚动条 通过查找资料后找到了一个可用的方法,代码如下: <!--div比table大小要小才会显示--> <d ...

  4. 吴裕雄--天生自然JAVA SPRING框架开发学习笔记:Spring目录结构和基础JAR包介绍

    可以通过网址 http://repo.spring.io/simple/libs-release-local/org/springframework/spring/ 下载名称为 springframe ...

  5. 吴裕雄--天生自然 JAVASCRIPT开发学习:输出

    <!DOCTYPE html> <html> <head> <meta charset="utf-8"> <title> ...

  6. CountUp.js 数字跳转效果小插件

    CountUp.js  实现数字跳转效果的小插件 //调用方法 const easingFn = function (t, b, c, d) { var ts = (t /= d) * t; var ...

  7. Python自学之路---Day01

    目录 Python自学之路---Day01 注释 单行注释 多行注释 print()函数 语法 参数 实例 input()函数 语法 参数 实例 查看Python的关键字 代码 变量与常量 变量 如何 ...

  8. Python时间问题

    获取当前的时间,time只能精确到秒,而datetime可以精确到毫秒,所以使用格式化的时候要注意. nowTime=time.localtime((time.time())) t=time.strf ...

  9. 五年Java经验,面试还是说不出日志该怎么写更好?——日志规范与最佳实践篇

    本文是一个系列,欢迎关注 查看上一篇文章可以扫描文章下方的二维码,点击往期回顾-日志系列即可查看所有相关文章 概览 上一篇我们讨论了为什么要使用日志框架,这次我们深入问题的根源,为什么我们需要日志? ...

  10. POJ 1200 Crazy Search 字符串的Hash查找

    第一次涉及HASH查找的知识 对于字符串的查找有很多前人开发出来的HASH函数,比较常用的好像是ELF 和 BKDR. 这道题没想到突破点是在于其nc值,告诉你组成字符串的字母种类. 还有用26进制, ...