iOS 自定义只有年月的DatePikerView
头文件:
@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的更多相关文章
- 【iOS自定义键盘及键盘切换】详解
[iOS自定义键盘]详解 实现效果展示: 一.实现的协议方法代码 #import <UIKit/UIKit.h> //创建自定义键盘协议 @protocol XFG_KeyBoardDel ...
- iOS自定义的UISwitch按钮
UISwitch开关控件 开关代替了点选框.开关是到目前为止用起来最简单的控件,不过仍然可以作一定程度的定制化. 一.创建 UISwitch* mySwitch = [[ UISwitchalloc] ...
- 如何实现 iOS 自定义状态栏
给大家介绍如何实现 iOS 自定义状态栏 Sample Code: 01 UIWindow * statusWindow = [[UIWindow alloc] initWithFrame:[UIAp ...
- iOS自定义组与组之间的距离以及视图
iOS自定义组与组之间的距离以及视图 //头视图高度 - (CGFloat)tableView:(UITableView *)tableView heightForHeaderInSection:(N ...
- iOS 自定义转场动画
代码地址如下:http://www.demodashi.com/demo/12955.html 一.总效果 本文记录分享下自定义转场动画的实现方法,具体到动画效果:新浪微博图集浏览转场效果.手势过渡动 ...
- iOS 自定义转场动画浅谈
代码地址如下:http://www.demodashi.com/demo/11612.html 路漫漫其修远兮,吾将上下而求索 前记 想研究自定义转场动画很久了,时间就像海绵,挤一挤还是有的,花了差不 ...
- iOS自定义转场动画实战讲解
iOS自定义转场动画实战讲解 转场动画这事,说简单也简单,可以通过presentViewController:animated:completion:和dismissViewControllerA ...
- WPF自定义选择年月控件详解
本文实例为大家分享了WPF自定义选择年月控件的具体代码,供大家参考,具体内容如下 封装了一个选择年月的控件,XAML代码: 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 ...
- IOS自定义表格UITableViewCell
在UITableView中,自定义表格,最原始是继承UITableViewCell,然后通过写代码方式去搞,但是这个费事了. 1.在storyboard中 给一个ViewController的tabi ...
随机推荐
- iOS内存管理布局及管理方案-理论篇
苹果设备备受欢迎的背后离不开iOS优秀的内存管理机制,那iOS的内存布局及管理方案是怎样的呢?我们一起研究下. 内存管理分为五大块 栈区(stack):线性结构,内存连续,系统自己管理内存,程序运行记 ...
- 吴裕雄--天生自然TensorFlow2教程:测试(张量)- 实战
import tensorflow as tf from tensorflow import keras from tensorflow.keras import datasets import os ...
- Nginx系列p3:实现一个具有缓存功能的反向代理服务器
今天我们利用 OpenResty 来实现一个反向代理服务器 step1:首先下载安装 OpenResty # 下载安装 OpenResty # 默认安装在 /usr/local 目录下,可在编译时指定 ...
- PAT Advanced 1155 Heap Paths (30) [DFS, 深搜回溯,堆]
题目 In computer science, a heap is a specialized tree-based data structure that satisfies the heap pr ...
- Git--rebase合并提交
参考 https://blog.csdn.net/hj7jay/article/details/78809547 https://blog.csdn.net/yangcs2009/article/de ...
- STM32速度---网页讲解
1. ① USART串口,若最大波特率只需115.2k,那用2M的速度就够了,既省电也噪声小. ② I2C接口,若使用400k波特率,若想把余量留大些,可以选用10M的GPIO引脚速度. ③ SPI接 ...
- 在Azure Storage 托管HTTP静态网站
本文演示了在Azure Storage托管HTTP静态网站. 注意:HTTP已经不建议使用. 创建Azure StorageV2 存储账户 账户类型选择“StorageV2(通用版V2)”: 本例中, ...
- 文献阅读报告 - Social LSTM:Human Trajectory Prediction in Crowded Spaces
概览 简述 文献所提出的模型旨在解决交通中行人的轨迹预测(pedestrian trajectory prediction)问题,特别是在拥挤环境中--人与人交互(interaction)行为常有发生 ...
- python笔记(很乱)、打算抽个时间再好好整理
最近刚开始学python.总结的可能不是很好 print:打印值 input:可以进行等候赋值.进行一个交互 python中 需要两个==才为判断 变量:数字.字母.下划线组成 类型:int整数.st ...
- Python—程序设计:单例模式
单例模式 单例模式(Singleton Pattern)属于创建型模式,它提供了一种创建对象的最佳方式.这种模式涉及到一个单一的类,该类负责创建自己的对象,同时确保只有单个对象被创建,并提供一种访问其 ...