iOS 自定义UIDatePicker

自定义UIPickerView方法,定义一个自己的View,然后把uipickerView 和其他的一些组件添加到View中去

如图所示:


代码:

@protocol CustomerDatePickerDelegate <NSObject>   //声明一个代理

-(void) selectDateWithString:(NSString *)date;

@end


@interface CustomerDatePickerView :UIView


@property(strong,nonatomicUIDatePicker *datePicker;

@property(strong,nonatomicid<CustomerDatePickerDelegate> delegate;


-(void) show;        //显示

-(void) close;       //消失

@end


//

//  CustomerDatePickerView.m

//  practice

//

//  Created by user on 15/3/20.

//  Copyright (c) 2015 user. All rights reserved.

//


#import "CustomerDatePickerView.h"




@implementation CustomerDatePickerView


#define AnimationDuration 0.3


-(NSDateFormatter *)getDateFormater

{

    staticNSDateFormatter *format;

    staticdispatch_once_t once;

   dispatch_once(&once, ^{

        format = [[NSDateFormatteralloc]init];

        [format setTimeZone:[NSTimeZonetimeZoneWithAbbreviation:@"HKT"]];

    });

   return format;

}


-(instancetype) initWithFrame:(CGRect)frame

{

   self = [superinitWithFrame:frame];

   if(self){

        self.backgroundColor = [UIColorwhiteColor];

       _datePicker = [[UIDatePickeralloc]init];

        _datePicker.datePickerMode =UIDatePickerModeDate;

        [_datePickersetLocale:[[NSLocalealloc]initWithLocaleIdentifier:@"zh_CN"]];

       _datePicker.frameCGRectMake(0,44,self.frame.size.width,216);

        [_datePickersetBackgroundColor:[UIColorwhiteColor]];

        [selfaddSubview:_datePicker];

        

       UIView *topView = [[UIViewalloc]initWithFrame:CGRectMake(0,0,self.frame.size.width,44)];

        [selfaddSubview:topView];

        

       UIButton *cancelButton = [[UIButtonalloc]initWithFrame:CGRectMake(30,8,40, 28)];

       UIButton *confirmButton = [[UIButtonalloc]initWithFrame:CGRectMake(self.frame.size.width - 30 - 40,8,40, 28)];

        [cancelButton setTitle:@"取消"forState:UIControlStateNormal];

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

        [cancelButton setTitleColor:[UIColorgreenColor]forState:UIControlStateNormal];

        [confirmButton setTitleColor:[UIColorgreenColor]forState:UIControlStateNormal];

        [cancelButton addTarget:selfaction:@selector(cancelButtonClicked)forControlEvents:UIControlEventTouchUpInside];

        [confirmButton addTarget:selfaction:@selector(confirmButtonClicked)forControlEvents:UIControlEventTouchUpInside];

        

        [selfaddSubview:cancelButton];

        [selfaddSubview:confirmButton];

    }

    return self;

}




-(void)confirmButtonClicked

{

   if(self.delegate && [self.delegaterespondsToSelector:@selector(selectDateWithString:)])   

    {

       NSDate  *date = [_datePickerdate];

       NSDateFormatter *foramte = [selfgetDateFormater];

        [foramtesetDateFormat:@"yyyy-MM-dd"];

        [self.delegateselectDateWithString:[foramtestringFromDate:date]];

    }

    [selfclose];

}


-(void) cancelButtonClicked

{

    [selfclose];

}



-(void) showDataPickerView:(BOOL)isShow withAnimation:(NSTimeInterval)duration

{

    @synchronized(self){

       if(isShow){

            [UIViewanimateWithDuration:durationanimations:^{

                [selfsetFrame:CGRectMake(0, [UIScreenmainScreen].bounds.size.height -self.frame.size.height,self.frame.size.width,self.frame.size.width)];

            }];

        }else {

            [UIViewanimateWithDuration:durationanimations:^{

                [selfsetFrame:CGRectMake(0, [UIScreenmainScreen].bounds.size.height,self.frame.size.width,self.frame.size.height)];

            }completion:^(BOOL finished){

                

            }];

        }

    };

}


-(void) show

{

    [selfshowDataPickerView:YESwithAnimation:AnimationDuration];

}


-(void) close

{

    [selfshowDataPickerView:NOwithAnimation:AnimationDuration];

}


/*

// Only override drawRect: if you perform custom drawing.

// An empty implementation adversely affects performance during animation.

- (void)drawRect:(CGRect)rect {

    // Drawing code

}

*/


@end



//在viewController中实现CustomerDatePickerDelegate代理

@interface ViewController ()<CustomerDatePickerDelegate>


{

   UIView *_backView;

   UIView *_firstView;

}



- (void)viewDidLoad {

    [superviewDidLoad];

    // Do any additional setup after loading the view, typically from a nib.

    

     UIButton *button = [[UIButtonalloc]initWithFrame:CGRectMake(100,100,100, 30)];

    [button setBackgroundColor:[UIColorgrayColor]];


    [[NSUserDefaultsstandardUserDefaults]setObject:@"您好"forKey:@"title"];

    

    [button setTitle:[[NSUserDefaults standardUserDefaults]objectForKey:@"title"]forState:UIControlStateNormal];

    

    //[self.view addSubview:button];

   if(button.isSelected ==YES)

    {

        

    }

    [button addTarget:selfaction:@selector(changeView)forControlEvents:UIControlEventTouchUpInside];

    

    

    _backView = [[UIViewalloc]initWithFrame:[UIScreenmainScreen].bounds];

    [_backViewsetFrame:CGRectMake(-self.view.frame.size.width,0,self.view.frame.size.width,self.view.frame.size.height)];

    [_backViewsetBackgroundColor:[UIColorgrayColor]];

    _backView.layer.borderColor = [UIColorredColor].CGColor;

    _backView.layer.borderWidth =2.0f;

    [self.viewaddSubview:_backView];

    

    [self.viewsendSubviewToBack:_backView];

    

    

    

    _firstView = [[UIViewalloc]initWithFrame:[UIScreenmainScreen].bounds];

    [self.viewaddSubview:_firstView];

    [_firstViewsetBackgroundColor:[UIColorgreenColor]];

    _firstView.layer.borderColor = [UIColororangeColor].CGColor;

    _firstView.layer.borderWidth =2.0f;

    [_firstViewaddSubview:button];

    

    

    UITapGestureRecognizer *tap = [[UITapGestureRecognizeralloc]initWithTarget:selfaction:@selector(tapGesture:)];

    [_firstViewaddGestureRecognizer:tap];

}


-(void) changeView

{

    CustomerDatePickerView *pickerView = [[CustomerDatePickerViewalloc]initWithFrame:CGRectMake(0,self.view.frame.size.height,self.view.frame.size.width,260)];

    pickerView.delegate =self;

    [self.viewaddSubview:pickerView];

    [pickerViewshow];

}

//实现代理函数

-(void) selectDateWithString:(NSString *)date

{

   NSLog(@"%@",date);

}






  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
提供的源码资源涵盖了Java应用等多个领域,每个领域都包含了丰富的实例和项目。这些源码都是基于各自平台的最新技术和标准编写,确保了在对应环境下能够无缝运行。同时,源码中配备了详细的注释和文档,帮助用户快速理解代码结构和实现逻辑。 适用人群: 适合毕业设计、课程设计作业。这些源码资源特别适合大学生群体。无论你是计算机相关专业的学生,还是对其他领域编程感兴趣的学生,这些资源都能为你提供宝贵的学习和实践机会。通过学习和运行这些源码,你可以掌握各平台开发的基础知识,提升编程能力和项目实战经验。 使用场景及目标: 在学习阶段,你可以利用这些源码资源进行课程实践、课外项目或毕业设计。通过分析和运行源码,你将深入了解各平台开发的技术细节和最佳实践,逐步培养起自己的项目开发和问题解决能力。此外,在求职或创业过程中,具备跨平台开发能力的大学生将更具竞争力。 其他说明: 为了确保源码资源的可运行性和易用性,特别注意了以下几点:首先,每份源码都提供了详细的运行环境和依赖说明,确保用户能够轻松搭建起开发环境;其次,源码中的注释和文档都非常完善,方便用户快速上手和理解代码;最后,我会定期更新这些源码资源,以适应各平台技术的最新发展和市场需求。 所有源码均经过严格测试,可以直接运行,可以放心下载使用。有任何使用问题欢迎随时与博主沟通,第一时间进行解答!

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值