文档章节

自定义一个日期选择器

默默沫沫shine
 默默沫沫shine
发布于 2016/05/23 13:29
字数 824
阅读 6
收藏 0
点赞 2
评论 0

#import <UIKit/UIKit.h>

 

@interface DataPickerView : UIView

 

@property (nonatomic,copy) void(^callMeRemove)();

 

@end

 

 

 

#import "DataPickerView.h"

 

@interface DataPickerView ()<UIPickerViewDataSource,UIPickerViewDelegate>

 

@property (nonatomic) UIPickerView   *pickView;

 

@property (nonatomic) UIView         *backdropView;

 

@property (nonatomic) NSMutableArray *pickerDataAray;

 

@property (nonatomic) UITableView    *tableView;

 

@property (nonatomic) NSMutableArray *years;

 

@property (nonatomic) NSMutableArray *mounths;

 

@property (nonatomic) NSMutableArray *dayes;

 

@property (nonatomic) NSInteger      whereYear;

 

@property (nonatomic) NSInteger      whereMouth;

 

@property (nonatomic) NSArray        *nibArray;

 

@property (nonatomic) NSInteger      page;

 

@property (nonatomic) NSInteger      numsOfPeople;

 

@property (nonatomic) NSString       *dicOfYear;

 

@property (nonatomic) NSString       *dicOfMouth;

 

@property (nonatomic) NSString       *dicOfDays;

 

@property (nonatomic) UIView         *bearView;

 

@property (nonatomic) NSInteger      tagOfTimeLabel;

 

@property (nonatomic) NSInteger      oldTimeBtnTag;

 

@end

 

 

@implementation DataPickerView

 

-(id)initWithFrame:(CGRect)frame

{

    if (self  = [super initWithFrame:frame]) {

        [self creatPickerView];

    }

    

    return self;

}

 

-(void)creatPickerView

{

 

    

    self.dicOfYear  = [Date_String  substringWithRange:NSMakeRange(0, 4)];

    self.dicOfMouth = [Date_String  substringWithRange:NSMakeRange(5, 2)];

    self.dicOfDays  = [Date_String  substringWithRange:NSMakeRange(8, 2)];

    self.whereYear  = [[Date_String substringWithRange:NSMakeRange(0, 4)] integerValue];

    self.years      = [NSMutableArray array];

    self.mounths    = [NSMutableArray array];

    self.dayes      = [NSMutableArray array];

    self.whereMouth = [[Date_String substringWithRange:NSMakeRange(5, 2)] integerValue];

    //日期选择器

    self.backdropView = [[UIView alloc] initWithFrame:self.bounds];

    self.backdropView.backgroundColor = [UIColor colorWithWhite:0.7 alpha:0.4];

    [self addSubview:self.backdropView];

    

    

    self.bearView = [[UIView alloc]initWithFrame:CGRectMake(30, 0, SCREEN_WIDTH-60, 320)];

    self.bearView.center = self.center;

    self.bearView.backgroundColor = WHITE_COLOR;

    [self.backdropView addSubview:self.bearView];

    

    [self getDatePickerData];

    

    NSArray *selectedNum = @[[Date_String substringWithRange:NSMakeRange(0 , 4)],[Date_String substringWithRange:NSMakeRange(5, 2)],[Date_String substringWithRange:NSMakeRange(8, 2)]];

    

    for (int index = 0; index<=2; index++) {

        self.pickView = [[UIPickerView alloc]initWithFrame:CGRectMake((SCREEN_WIDTH-60)*index/3, 130, (SCREEN_WIDTH-60)/3, 120)];

        

        self.pickView.backgroundColor = [UIColor colorWithWhite:0.95 alpha:0.3];

        self.pickView.delegate =self;

        self.pickView.dataSource = self;

        self.pickView.tag = 100+index;

        //_rowA = [selectedNum[index] integerValue]-1;

        if (index) {

            [self.pickView selectRow:[selectedNum[index] integerValue]-1 inComponent:0 animated:YES];

        }else{

            [self.pickView selectRow:30 inComponent:0 animated:YES];

        }

        [self.bearView addSubview:self.pickView];

        

    }

    

    UIButton *button = [[UIButton alloc]initWithFrame:CGRectMake(20, 240+30, SCREEN_WIDTH-60-40, 30)];

    [button setTitleColor:WHITE_COLOR forState:UIControlStateNormal];

    [button setTitle:@"确定" forState:UIControlStateNormal];

    [button addTarget:self action:@selector(makeSureHowTimes) forControlEvents:UIControlEventTouchUpInside];

    

    

    [button setBackgroundImage:[UIImage imageWithContentsOfFile:The_path_Resource(@"Button")] forState:UIControlStateNormal];

    button.layer.cornerRadius = 7.5;

    [self.bearView addSubview:button];

    

    UIImageView *diseIV = [[UIImageView alloc]initWithFrame:CGRectMake(0, 0, SCREEN_WIDTH-60, 110)];

    diseIV.image = [UIImage imageWithContentsOfFile:The_path_Resource(@"dise")];

    diseIV.userInteractionEnabled = YES;

    [self.bearView addSubview:diseIV];

    

    UIImageView *clockIV = [[UIImageView alloc]initWithFrame:CGRectMake((SCREEN_WIDTH-60)-90*285/226, 20, 90*285/226, 90)];

    clockIV.image = [UIImage imageWithContentsOfFile:The_path_Resource(@"Clock")];

    clockIV.userInteractionEnabled = YES;

    [self.bearView addSubview:clockIV];

    

    

    UILabel *lable = [[UILabel alloc]initWithFrame:CGRectMake(0, 0, SCREEN_WIDTH-60, 30)];

    lable.backgroundColor =[UIColor clearColor];

    lable.text = @"自选天数";

    lable.center = CGPointMake((SCREEN_WIDTH-60)/2, 25);

    lable.textColor = WHITE_COLOR;

    lable.textAlignment = NSTextAlignmentCenter;

    [self.bearView addSubview:lable];

    

    

    NSArray *placeHloders = @[@"点击选择开始日期",@"点击选择结束日期"];

    for (int index = 0; index <= 1; index++) {

        UIButton *timeLable = [[UIButton alloc]initWithFrame:CGRectMake(35, 50+30*index, SCREEN_WIDTH-130, 25)];

        timeLable.backgroundColor =[UIColor clearColor];

        [timeLable setTitle:placeHloders[index] forState:UIControlStateNormal];

        timeLable.titleLabel.tintColor = WHITE_COLOR;

        timeLable.layer.borderWidth = 1;

        timeLable.layer.borderColor = WHITE_COLOR.CGColor;

        timeLable.tag = 600+index;

        timeLable.titleLabel.textAlignment = NSTextAlignmentCenter;

        [timeLable addTarget:self action:@selector(makeSureWhichLabelTime:) forControlEvents:UIControlEventTouchUpInside];

        [self.bearView addSubview:timeLable];

    }

    

    

}

 

-(void)getDatePickerData

{

    NSString *stringDate = [NSString stringWithFormat:@"%@",[NSDate date]];

    int a = [[stringDate substringToIndex:4] intValue];

    

    for (int index = a-30; index<=a+30; index++) {

        [self.years addObject:[NSString stringWithFormat:@"%d",index]];

    }

    

    int index =1;

    while (index<=12) {

        [self.mounths addObject:[NSString stringWithFormat:@"%d",index]];

        index++;

    }

    

    for (int day = 1; day <= 31; day++) {

        [self.dayes addObject:[NSString stringWithFormat:@"%d",day]];

    }

    

    

}

 

#pragma mark - 日期选择器代理实现方法 -

- (NSInteger)numberOfComponentsInPickerView:(UIPickerView *)pickerView

{

    return 1;

}

 

- (NSInteger)pickerView:(UIPickerView *)pickerView numberOfRowsInComponent:(NSInteger)component

{

    

    switch (pickerView.tag) {

        case 100:

        {

            return self.years.count;

        }

            break;

        case 101:

        {

            return 12;

        }

            break;

            

        default:{

            

            NSInteger mounth = self.whereMouth;

            if (mounth==1||mounth==3||mounth==5||mounth==7||mounth==8||mounth==10||mounth==12) {

                

                return 31;

                

            }else if(mounth==2){

                NSInteger year =self.whereYear;

                if((year%4==0&&year%100!=0)||(year%400==0)) {

                    

                    return 29;

                    

                }else{

                    

                    return 28;

                    

                }

            }else{

                

                return 30;

                

            }

            

        }

            break;

    }

    

}

 

-(NSString *)pickerView:(UIPickerView *)pickerView titleForRow:(NSInteger)row forComponent:(NSInteger)component

{

    switch (pickerView.tag) {

        case 100:

        {

            return [NSString stringWithFormat:@"%@年",self.years[row]];

        }

            break;

        case 101:

        {

            return [NSString stringWithFormat:@"%@月",self.mounths[row]];

        }

            break;

            

        default:{

            

            return [NSString stringWithFormat:@"%@日",self.dayes[row]];

            

        }

            break;

    }

}

 

- (UIView *)pickerView:(UIPickerView *)pickerView viewForRow:(NSInteger)row forComponent:(NSInteger)component reusingView:(UIView *)view

{

    UILabel* pickerLabel = (UILabel*)view;

    if (!pickerLabel){

        pickerLabel = [[UILabel alloc] init];

        pickerLabel.adjustsFontSizeToFitWidth = YES;

        pickerLabel.textAlignment = NSTextAlignmentCenter;

        [pickerLabel setBackgroundColor:[UIColor clearColor]];

        pickerLabel.tag = 444;

        [pickerLabel setFont:[UIFont boldSystemFontOfSize:17]];

        

    }

    pickerLabel.text=[self pickerView:pickerView titleForRow:row forComponent:component];

    return pickerLabel;

}

 

-(void)pickerView:(UIPickerView *)pickerView didSelectRow:(NSInteger)row inComponent:(NSInteger)component

{

    

    

    switch (pickerView.tag) {

        case 100:

        {

            self.whereYear =[self.years[row] integerValue];

            self.dicOfYear = self.years[row];

            

        }

            break;

        case 101:

        {

            self.whereMouth = row+1;

            self.dicOfMouth = [NSString stringWithFormat:@"%.2ld",row+1];

            

        }

            break;

            

        default:{

            NSString *str = [NSString stringWithFormat:@"%.2ld",row+1];

            self.dicOfDays = str;

            

        }

            

            

            break;

    }

    

    NSArray *textArr = @[self.dicOfYear,self.dicOfMouth,self.dicOfDays];

    

    if (self.tagOfTimeLabel==600) {

        UIButton *button = [self.bearView viewWithTag:600];

        [button setTitle:[textArr componentsJoinedByString:@"-"] forState:UIControlStateNormal];

        [OrderInstance sharedInstance].model.card_valid_date = [textArr componentsJoinedByString:@"-"];

        

    }else if(self.tagOfTimeLabel==601){

        UIButton *button = [self.bearView viewWithTag:601];

        [button setTitle:[textArr componentsJoinedByString:@"-"] forState:UIControlStateNormal];

        [OrderInstance sharedInstance].model.card_exp_date = [textArr componentsJoinedByString:@"-"];

        

       

    }

    

    

    [self.pickView reloadAllComponents];

    

}

 

-(void)makeSureWhichLabelTime:(UIButton *)button

{

    UIButton *btn = [self.bearView viewWithTag:self.oldTimeBtnTag];

    btn.layer.borderWidth = 1;

    button.layer.borderWidth = 3;

    self.tagOfTimeLabel = button.tag;

    self.oldTimeBtnTag = button.tag;

}

-(void)makeSureHowTimes

{

 

    

    if (_callMeRemove) {

        

        self.callMeRemove();

        

    }

    

}

 

-(void)touchesBegan:(NSSet<UITouch *> *)touches withEvent:(UIEvent *)event

{

    if (_callMeRemove) {

        

        self.callMeRemove();

        

    }

}

 

© 著作权归作者所有

共有 人打赏支持
默默沫沫shine
粉丝 0
博文 13
码字总数 4174
作品 0
朝阳
程序员
9个有用的jQuery日历和网页设计师的日期选择器插件

事件日历和日期选择器是是我们开发当中经常遇到的问题,这个时候我们就需要用jquery插件来实现,昨天我在做项目的时候,遇到了个问题就是如何显示倒计时问题,我这个时候就用jquery插件解决的...

未来十年 ⋅ 2012/01/02 ⋅ 0

layDate 5.0 正式版发布,独立清爽的日期与时间组件

layDate 是 layui 独立维护的三大组件之一(即该版本可独立使用,无需采用 layui),最早发布于2014年6月,但当时只迭代了一个版本,就再也没有更新。而现在,我们对其进行了一次全面的重写,...

贤心 ⋅ 2017/08/25 ⋅ 11

Mark一下,日期控件

1)My97DatePicker是一个更全面,更人性化,并且速度一流的日期选择控件。具有强大的日期范围限制功能;自定义事件和丰富的API库;多语言支持和自定义皮肤支持;跨无限级框架显示和自动选择显...

DustLeon ⋅ 2011/10/28 ⋅ 0

给开发者准备的 10 款最好的 jQuery 日历插件

这篇文章介绍的是 10 款最棒而且又很有用的 jQuery日历插件,允许开发者们把这些漂亮的日历插件结合到自己的网站中。这些日历插件易用性都很强,轻轻松松的就可以把漂亮的日历插件装饰到你的...

oschina ⋅ 2014/01/27 ⋅ 10

andorid择器类库,包括日期及时间选择器性别、职业、学历、星座等

andorid择器类库,包括日期及时间选择器性别、职业、学历、星座等 安度博客 » 安度博客2017-05-1827 阅读 Andorid时间星座日期选择器 描述: 安卓选择器类库,包括日期及时间选择器(可设置...

安度博客 » 安度博客 ⋅ 2017/05/18 ⋅ 0

MWDatePicker

MWDatePicker 是一个用于替代 UIDatePicker 的日期选择器控件,支持自定义北京和选择器样式。 要求: iOS 6.0 或者更新版本 ARC

红薯 ⋅ 2013/06/25 ⋅ 1

jquery公用web功能组件--GRI

从GRI(Ghost Rider Igniter)应用php开发框架中提取出的公用web功能组件,包括列表,图,日期,月份选择器,上传等。微信公众平台用到 文件列表 jQuery.min.js 官方jQuery v1.7.2版本 gri....

欢哥 ⋅ 2013/10/23 ⋅ 0

layDate 5.0.6 发布,全新一代 JS 日期与时间组件

layDate 是 layui 独立维护的组件(即该版本可独立使用,无需采用 layui),拥有强劲的功能和灵活的主题。本次更新日志如下: 5.0.6 优化时间选择器(time)的范围选择体验,不再校验“结束时...

贤心 ⋅ 2017/09/13 ⋅ 6

微信小程序开发之选择器 时间选择器 日期选择器 地区选择器

用微信封装好的控件感觉很好,为我们开发人员省去了很多麻烦.弊端就是不能做大量的自定义.今天试用了选择器. 上gif: 上代码: 1.index.js //index.js//获取应用实例var app = getApp()Page({d...

qq_31383345 ⋅ 2016/11/08 ⋅ 0

触摸设备的日期选择插件--Mobiscroll

Mobiscroll是一个用于触摸设备(Android phones, iPhone, iPad, Galaxy Tab)的日期和时间选择器jQuery插件。可以让用户很方便的只需要滑动数字既可以选择日期。Mobiscroll作为一款jQuery日期插...

匿名 ⋅ 2011/08/14 ⋅ 3

没有更多内容

加载失败,请刷新页面

加载更多

下一页

Boost库编译应用

版本:Boost 1.66.0 Windows库编译 官网指南:直接执行bootstrap.bat处理文件即可,可以我却遇到一堆的问题。 环境:Windows 10 + Visual Studio 2017 Boost编译出来库命名 boost库生成文件命...

水海云 ⋅ 26分钟前 ⋅ 0

解决Eclipse发布到Tomcat丢失依赖jar包的问题

如果jar文件是以外部依赖的形式导入的。Eclipse将web项目发布到Tomcat时,是不会自动发布这些依赖的。 可以通过Eclipse在项目上右击 - Propertics - Deployment Assembly,添加“Java Build ...

ArlenXu ⋅ 26分钟前 ⋅ 0

iview tree组件层级过多时可左右滚动

使用vue+iview的tree组件,iview官网iview的tree树形控件 问题描述:tree层级过多时左右不可滚动 问题解决:修改overflow属性值 .el-tree-node>.el-tree-node_children { overflow: vi...

YXMBetter ⋅ 28分钟前 ⋅ 0

分布式锁

1.通过数据库实现 http://www.weizijun.cn/2016/03/17/%E8%81%8A%E4%B8%80%E8%81%8A%E5%88%86%E5%B8%83%E5%BC%8F%E9%94%81%E7%9A%84%E8%AE%BE%E8%AE%A1/ 2.ZK实现:curator-recipes分布式锁的......

素雷 ⋅ 36分钟前 ⋅ 0

Sublime Text3 快捷键

选择类 Ctrl+D 选中光标所占的文本,继续操作则会选中下一个相同的文本。 Alt+F3 选中文本按下快捷键,即可一次性选择全部的相同文本进行同时编辑。举个栗子:快速选中并更改所有相同的变量名...

AndyZhouX ⋅ 43分钟前 ⋅ 0

XamarinAndroid组件教程RecylerView自定义适配器动画

XamarinAndroid组件教程RecylerView自定义适配器动画 如果RecyclerViewAnimators.Adapters命名空间中没有所需要的适配器动画,开发者可以自定义动画。此时,需要让自定义的动画继承Animation...

大学霸 ⋅ 43分钟前 ⋅ 0

eureka 基础(二)

使用Eureka服务器进行身份验证 如果其中一个eureka.client.serviceUrl.defaultZone网址中包含一个凭据(如http://user:password@localhost:8761/eureka)),HTTP基本身份验证将自动添加到您...

明理萝 ⋅ 46分钟前 ⋅ 1

Kubernetes(五) - Service

Kubernetes解决的另外一个痛点就是服务发现,服务发现机制和容器开放访问都是通过Service来实现的,把Deployment和Service关联起来只需要Label标签相同就可以关联起来形成负载均衡,基于kuberne...

喵了_个咪 ⋅ 46分钟前 ⋅ 0

更新队友POM文件后报错

打开报错的地方的pom及其引用方法所在文件的pom,观察其版本号是否一致,不一致进行更改

森火 ⋅ 今天 ⋅ 0

IDEA使用sonarLint

一、IDEA如何安装SonarLint插件 1.打开 Idea 2.点击【File】 3.点击【Settings】 4.点击【Plugins】 5.在搜索栏中输入“sonarlint”关键字 6.点击【Install】进行安装 7.重启Idea 二、IDEA如...

开源中国成都区源花 ⋅ 今天 ⋅ 0

没有更多内容

加载失败,请刷新页面

加载更多

下一页

返回顶部
顶部