UIDatepicker日期选择框的使用与日期键盘的定义
2016-01-09 00:56
633 查看
第一部分:日期选择框的简单使用
1.1 选择iPhone屏幕
![](https://oscdn.geek-share.com/Uploads/Images/Content/201601/15ef801da84dc41c66d063133ea978af)
1.2 拖进一个UIPickerView日期选择框
![](https://oscdn.geek-share.com/Uploads/Images/Content/201601/9c973214e5afc885a074bac060215f50)
运行后发现全是英文显示 如下图所示:
![](https://oscdn.geek-share.com/Uploads/Images/Content/201601/946fb605ba902c5c29552ed3a42acd85)
1.3 打开storyboard对应的属性设置,设置Mode属性可以设置日期选择框的样式,设置Locale本地化属性设置可以设置它的语言为中文显示,如下图所示:
![](https://oscdn.geek-share.com/Uploads/Images/Content/201601/225a57cdb51a320e8043a653d9d4e55c)
1.4 拖线添加组件属性,也可以手动设置日期选择框的样式,如下所示:
![](https://oscdn.geek-share.com/Uploads/Images/Content/201601/3b4f3e3396baf4bec7852aab020f3b2d)
![](https://oscdn.geek-share.com/Uploads/Images/Content/201601/535af20b86e68621298065e9fae3ccae)
可以手动打印所有的本地化标示符
![](https://oscdn.geek-share.com/Uploads/Images/Content/201601/b053f9617290cacf15bcb00fa8f5e657)
打印本地化标示符和手动代码设置本地化显示的代码如下:
第二部分:设置日期选择器为输入框的弹出键盘,即弹出日期键盘。实现步骤具体如下:
2.1 首先拖进一个输入框
![](https://oscdn.geek-share.com/Uploads/Images/Content/201601/88b6b617780cf01ef608962b314316a1)
2.1 需要手动创建一个UIDatePicker组件来作为输入框的日期选择键盘。注意:必须是手动代码或XIB创建,否则的话如果使用拖进当前View的日期选择器作为输入框的键盘会提示父控制器错误。设置textField的输入键盘 需要设置它的inputView属性。截图如下:
![](https://oscdn.geek-share.com/Uploads/Images/Content/201601/3471b674b65996a5a28f00e3bd6c7496)
2.2 涉及工具条UIToolbar,先做测试,一般往工具条内拖进Item时默认是从左往右排列的如下所示:
![](https://oscdn.geek-share.com/Uploads/Images/Content/201601/73dfda2956a619ad33f5fc7704984c84)
为了能改变Item的位置,需要使用弹簧组件进行布控。在搜索组件时搜索 UIbar 就会出现相关的弹簧组件,其中,Fixed Space Bar Button Item:表示定长弹簧,可以设置它的长度来拉开两个Item之间的间距;Flexible Space Bar Button Item 表示带有自动拉伸功能的弹簧,可以自动根据屏幕设置Item居左或具有。步骤如下:
![](https://oscdn.geek-share.com/Uploads/Images/Content/201601/b4c863c045cb012b8ff95737a46fe14e)
加弹簧后的运行效果如下:
![](https://oscdn.geek-share.com/Uploads/Images/Content/201601/77b16b9c06022284ed6e3d37355a3952)
2.25 如果手动代码实现工具栏的以上布局,并将工具条作为键盘的辅助工具条,需要以下几个过程,注意以下几点:
定长/拉伸弹簧和事件Item的创建都属于UIBarButtonItem类型,事件Item的创建使用[[UIBarButtonItem alloc] initWithTitle:@"XXX" style:UIBarButtonItemStylePlain target: action] 方法。弹性弹簧的代码创建使用 [[UIBarButtonItem alloc] initWithBarButtonSystemItem:UIBarButtonSystemItemFlexibleSpace
target: action: ]方法,而定长弹簧的代码创建使用[[UIBarButtonItem alloc] initWithBarButtonSystemItem:UIBarButtonSystemItemFixedSpace target: action: ]方法。 另外需要注意的是手动代码创建定长弹簧后需要设置弹簧的宽度 .width = 最后必不可少的一步就是需要将创建好的所有Item按顺序添加到工具条的items数组中。具体如下:
![](https://oscdn.geek-share.com/Uploads/Images/Content/201601/17a2a3e513e6ebb8763f49b8bbfc63e8)
另外设置textField的辅助工具条的属性是inputAccessoryView。
2.3 新建一个继承于UIToolbar的类,使用XIB实现工具条
![](https://oscdn.geek-share.com/Uploads/Images/Content/201601/a1414d9e7fcb1853339fb36055606f2c)
2.4 新建XIB对工具条进行描述
![](https://oscdn.geek-share.com/Uploads/Images/Content/201601/5757ad48a293c56022309beecb2f977e)
2.5 因为绑定的是继承于UIToolbar的自定义类,而XIB中是默认继承于View的,所以要将其删除重新拖进一个UIToolbar组件,如下所示:
![](https://oscdn.geek-share.com/Uploads/Images/Content/201601/4eecd7811ff7c332c0692ff7a951c1e5)
2.6 往UIToolbar组件内拖进 相应的Item和弹簧,与上面相同,并与创建的自定义组件类进行绑定如下所示:
![](https://oscdn.geek-share.com/Uploads/Images/Content/201601/51b86a1f13394f2cc36bbeb2b62e1545)
2.7 绑定后 即可拖线实现响应的Item事件。
![](https://oscdn.geek-share.com/Uploads/Images/Content/201601/939ef1bde59edb019a1f561ef4ee7163)
2.8 因为单独抽取了出来,要想在控制器内响应Item的事件,需要使用代理进行通知。在自定义的类中添加协议,一般情况下,与自定义控件相关的协议中的方法参数都要包含此控件(以便在控制器中修改自定义控件的属性)和 内部的Item或Button(便于根据Tag值对不同的Item进行事件处理)
![](https://oscdn.geek-share.com/Uploads/Images/Content/201601/16749aa4eb3ade87d853cc97a451005b)
2.9 需要注意的是在为自定义控件设置遵循协议的代理属性(id类型)时,不要将代理名称和父类中的代理属性名重合,否则会造成混乱。如下所示:
![](https://oscdn.geek-share.com/Uploads/Images/Content/201601/0aa3720cb5001d1c33983f49ea690352)
判断代理属性是否实现了协议方法,避免出错:
![](https://oscdn.geek-share.com/Uploads/Images/Content/201601/fa399615651e420054d33eb6ddbde285)
剩余步骤如下:
![](https://oscdn.geek-share.com/Uploads/Images/Content/201601/aed3e54dc8c08c4ec5ef7a86b5f3f9d7)
![](https://oscdn.geek-share.com/Uploads/Images/Content/201601/e2c89f54d87cf57d2c0e0e5d4734fba1)
运行结果如下:
![](https://oscdn.geek-share.com/Uploads/Images/Content/201601/7c393566ecc09e9e539b799c7f87feb7)
工程如下:
自定义工具条 CZKeyboardToolbar.h
viewController.m
1.1 选择iPhone屏幕
1.2 拖进一个UIPickerView日期选择框
运行后发现全是英文显示 如下图所示:
1.3 打开storyboard对应的属性设置,设置Mode属性可以设置日期选择框的样式,设置Locale本地化属性设置可以设置它的语言为中文显示,如下图所示:
1.4 拖线添加组件属性,也可以手动设置日期选择框的样式,如下所示:
可以手动打印所有的本地化标示符
打印本地化标示符和手动代码设置本地化显示的代码如下:
// // ViewController.m // 04.日期选择框与键盘处理 // // Created by 刘刘勋 on 16/1/3. // Copyright © 2016年 aaaaa. All rights reserved. // #import "ViewController.h" @interface ViewController () @property (weak, nonatomic) IBOutlet UIDatePicker *datePicker; @end @implementation ViewController - (void)viewDidLoad { [super viewDidLoad]; // 设置日期控制的本地化 // 打印所有的本地化标示符 NSLog(@"%@",[NSLocale availableLocaleIdentifiers]); self.datePicker.locale = [[NSLocale alloc] initWithLocaleIdentifier:@"zh"]; } - (void)didReceiveMemoryWarning { [super didReceiveMemoryWarning]; // Dispose of any resources that can be recreated. } @end
第二部分:设置日期选择器为输入框的弹出键盘,即弹出日期键盘。实现步骤具体如下:
2.1 首先拖进一个输入框
2.1 需要手动创建一个UIDatePicker组件来作为输入框的日期选择键盘。注意:必须是手动代码或XIB创建,否则的话如果使用拖进当前View的日期选择器作为输入框的键盘会提示父控制器错误。设置textField的输入键盘 需要设置它的inputView属性。截图如下:
2.2 涉及工具条UIToolbar,先做测试,一般往工具条内拖进Item时默认是从左往右排列的如下所示:
为了能改变Item的位置,需要使用弹簧组件进行布控。在搜索组件时搜索 UIbar 就会出现相关的弹簧组件,其中,Fixed Space Bar Button Item:表示定长弹簧,可以设置它的长度来拉开两个Item之间的间距;Flexible Space Bar Button Item 表示带有自动拉伸功能的弹簧,可以自动根据屏幕设置Item居左或具有。步骤如下:
加弹簧后的运行效果如下:
2.25 如果手动代码实现工具栏的以上布局,并将工具条作为键盘的辅助工具条,需要以下几个过程,注意以下几点:
定长/拉伸弹簧和事件Item的创建都属于UIBarButtonItem类型,事件Item的创建使用[[UIBarButtonItem alloc] initWithTitle:@"XXX" style:UIBarButtonItemStylePlain target: action] 方法。弹性弹簧的代码创建使用 [[UIBarButtonItem alloc] initWithBarButtonSystemItem:UIBarButtonSystemItemFlexibleSpace
target: action: ]方法,而定长弹簧的代码创建使用[[UIBarButtonItem alloc] initWithBarButtonSystemItem:UIBarButtonSystemItemFixedSpace target: action: ]方法。 另外需要注意的是手动代码创建定长弹簧后需要设置弹簧的宽度 .width = 最后必不可少的一步就是需要将创建好的所有Item按顺序添加到工具条的items数组中。具体如下:
另外设置textField的辅助工具条的属性是inputAccessoryView。
2.3 新建一个继承于UIToolbar的类,使用XIB实现工具条
2.4 新建XIB对工具条进行描述
2.5 因为绑定的是继承于UIToolbar的自定义类,而XIB中是默认继承于View的,所以要将其删除重新拖进一个UIToolbar组件,如下所示:
2.6 往UIToolbar组件内拖进 相应的Item和弹簧,与上面相同,并与创建的自定义组件类进行绑定如下所示:
2.7 绑定后 即可拖线实现响应的Item事件。
2.8 因为单独抽取了出来,要想在控制器内响应Item的事件,需要使用代理进行通知。在自定义的类中添加协议,一般情况下,与自定义控件相关的协议中的方法参数都要包含此控件(以便在控制器中修改自定义控件的属性)和 内部的Item或Button(便于根据Tag值对不同的Item进行事件处理)
2.9 需要注意的是在为自定义控件设置遵循协议的代理属性(id类型)时,不要将代理名称和父类中的代理属性名重合,否则会造成混乱。如下所示:
判断代理属性是否实现了协议方法,避免出错:
剩余步骤如下:
运行结果如下:
工程如下:
自定义工具条 CZKeyboardToolbar.h
// // CZKeyboardToolbar.h // DatePicker(键盘) // // Created by 刘刘勋 on 16/1/3. // Copyright © 2016年 aaaaa. All rights reserved. // #import <UIKit/UIKit.h> @class CZKeyboardToolbar; @protocol CZKeyboardToolbarDelegate <NSObject> @optional -(void)keyboardToolbar:(CZKeyboardToolbar *)toolbar btnSelected:(UIBarButtonItem *)item; @end @interface CZKeyboardToolbar : UIToolbar +(instancetype)toolbar; @property (weak, nonatomic) id <CZKeyboardToolbarDelegate> kbDelegate; // 键盘的代理 @endCZKeyboardToolbar.m
// // CZKeyboardToolbar.m // DatePicker(键盘) // // Created by 刘刘勋 on 16/1/3. // Copyright © 2016年 aaaaa. All rights reserved. // #import "CZKeyboardToolbar.h" @interface CZKeyboardToolbar() @end @implementation CZKeyboardToolbar +(instancetype)toolbar{ return [[[NSBundle mainBundle] loadNibNamed:@"CZKeyboardToolbar" owner:nil options:nil] lastObject]; } - (IBAction)itemBtnClick:(id)sender { // 判断代理方法有没有实现 if ([self.kbDelegate respondsToSelector:@selector(keyboardToolbar:btnSelected:)]) { [self.kbDelegate keyboardToolbar:self btnSelected:sender]; } } @end
viewController.m
// // ViewController.m // DatePicker(键盘) // // Created by 刘刘勋 on 16/1/3. // Copyright © 2016年 aaaaa. All rights reserved. // #import "ViewController.h" #import "CZKeyboardToolbar.h" @interface ViewController ()<CZKeyboardToolbarDelegate> @property(nonatomic, strong)UIDatePicker *datepicker; @property (weak, nonatomic) IBOutlet UITextField *textField; @end @implementation ViewController - (void)viewDidLoad { [super viewDidLoad]; // 创建一个datePicker self.datepicker = [[UIDatePicker alloc] init]; // 本地化 self.datepicker.locale = [[NSLocale alloc] initWithLocaleIdentifier:@"zh"]; // 日期控件的格式 self.datepicker.datePickerMode = UIDatePickerModeDate; // 设置textField的键盘 self.textField.inputView = self.datepicker; CZKeyboardToolbar *toolbar = [CZKeyboardToolbar toolbar]; toolbar.kbDelegate = self; // 设置textField的辅助工具条 self.textField.inputAccessoryView = toolbar; } #pragma mark- 自定义辅助工具条的代理方法 -(void)keyboardToolbar:(CZKeyboardToolbar *)toolbar btnSelected:(UIBarButtonItem *)item { NSLog(@"XXXXXX"); if (item.tag == 2) { // 获取日期显示在textField NSDate *date = self.datepicker.date; NSLog(@"%@", date); // 日期转字符串 NSDateFormatter *formatter = [[NSDateFormatter alloc] init]; // 设置日期格式 formatter.dateFormat = @"yyyy-MM-dd"; NSString *dateStr = [formatter stringFromDate:date]; self.textField.text = dateStr; } } /* 代码创建的toolbar */ -(void)codeForToolbar{ // 代码创建UIToolbar UIToolbar *toolbar = [[UIToolbar alloc] init]; toolbar.backgroundColor = [UIColor grayColor]; // 屏幕宽度 CGFloat screenW = [[UIScreen mainScreen] bounds].size.width; toolbar.bounds = CGRectMake(0, 0, screenW, 44); UIBarButtonItem *previousBtn = [[UIBarButtonItem alloc] initWithTitle:@"上一个" style:UIBarButtonItemStylePlain target:self action:nil]; UIBarButtonItem *nextBtn = [[UIBarButtonItem alloc] initWithTitle:@"下一个" style:UIBarButtonItemStylePlain target:self action:nil]; UIBarButtonItem *doneBtn = [[UIBarButtonItem alloc] initWithTitle:@"done" style:UIBarButtonItemStylePlain target:self action:nil]; // 固定长度的按钮——不可拉伸的弹簧 UIBarButtonItem *fixedItem = [[UIBarButtonItem alloc] initWithBarButtonSystemItem:UIBarButtonSystemItemFixedSpace target:nil action:nil]; // 代码实现要设置宽度 fixedItem.width = 20; // 可拉伸的弹簧组件 UIBarButtonItem *flexibleItem = [[UIBarButtonItem alloc] initWithBarButtonSystemItem:UIBarButtonSystemItemFlexibleSpace target:nil action:nil]; // 往UIToolbar里添加按钮 toolbar.items = @[previousBtn,fixedItem,nextBtn,flexibleItem,doneBtn]; } - (void)didReceiveMemoryWarning { [super didReceiveMemoryWarning]; // Dispose of any resources that can be recreated. } @end
相关文章推荐
- UITableView 的简单介绍
- Quartz2D---苹果官方的⼆维绘图引擎(绘制基本图形)
- 14、UI_02拨号盘动画
- yuicompressor-maven-plugin插件-用于压缩js,css
- iOS:笔记:UIButton
- 【ZBar】ios错误ignoring file xxx missing required architecture x86_64 in file
- IOS UIView圆角,阴影,边框,渐增光泽
- 解决UITableView分割线距左边有距离的办法
- 优先级队列(大顶堆)
- 关于UIView类的frame属性和bounds属性的origin点的区别
- iOS UITableView(十一) tableView的下拉刷新
- requirejs——基础
- EasyUi之menubutton
- IOS开发 UI UISlider
- java中continue,return,break的区别
- SQL Server IP地址格式转换(GUID To String)
- 分布式逻辑管理平台XXL-GLUE
- <LeetCode OJ> 63. Unique Paths II
- 用户中心页面NavigationBar自动隐藏+UIImagePickerController使用
- Hibernate中inverse="true"的理解