UIDatepicker日期选择框的使用与日期键盘的定义

小咪咪 2022-08-19 08:52 323阅读 0赞

第一部分:日期选择框的简单使用

1.1 选择iPhone屏幕

Center

1.2 拖进一个UIPickerView日期选择框

Center 1

运行后发现全是英文显示 如下图所示:

Center 2

1.3 打开storyboard对应的属性设置,设置Mode属性可以设置日期选择框的样式,设置Locale本地化属性设置可以设置它的语言为中文显示,如下图所示:

Center 3

1.4 拖线添加组件属性,也可以手动设置日期选择框的样式,如下所示:

Center 4

Center 5

可以手动打印所有的本地化标示符

Center 6

打印本地化标示符和手动代码设置本地化显示的代码如下:

  1. //
  2. // ViewController.m
  3. // 04.日期选择框与键盘处理
  4. //
  5. // Created by 刘刘勋 on 16/1/3.
  6. // Copyright © 2016年 aaaaa. All rights reserved.
  7. //
  8. #import "ViewController.h"
  9. @interface ViewController ()
  10. @property (weak, nonatomic) IBOutlet UIDatePicker *datePicker;
  11. @end
  12. @implementation ViewController
  13. - (void)viewDidLoad {
  14. [super viewDidLoad];
  15. // 设置日期控制的本地化
  16. // 打印所有的本地化标示符
  17. NSLog(@"%@",[NSLocale availableLocaleIdentifiers]);
  18. self.datePicker.locale = [[NSLocale alloc] initWithLocaleIdentifier:@"zh"];
  19. }
  20. - (void)didReceiveMemoryWarning {
  21. [super didReceiveMemoryWarning];
  22. // Dispose of any resources that can be recreated.
  23. }
  24. @end

第二部分:设置日期选择器为输入框的弹出键盘,即弹出日期键盘。实现步骤具体如下:

2.1 首先拖进一个输入框

Center 7

2.1 需要手动创建一个UIDatePicker组件来作为输入框的日期选择键盘。注意:必须是手动代码或XIB创建,否则的话如果使用拖进当前View的日期选择器作为输入框的键盘会提示父控制器错误。设置textField的输入键盘 需要设置它的inputView属性。截图如下:

Center 8

2.2 涉及工具条UIToolbar,先做测试,一般往工具条内拖进Item时默认是从左往右排列的如下所示:

Center 9

为了能改变Item的位置,需要使用弹簧组件进行布控。在搜索组件时搜索 UIbar 就会出现相关的弹簧组件,其中,Fixed Space Bar Button Item:表示定长弹簧,可以设置它的长度来拉开两个Item之间的间距;Flexible Space Bar Button Item 表示带有自动拉伸功能的弹簧,可以自动根据屏幕设置Item居左或具有。步骤如下:

Center 10

加弹簧后的运行效果如下:

Center 11

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数组中。具体如下:

Center 12

另外设置textField的辅助工具条的属性是inputAccessoryView。

2.3 新建一个继承于UIToolbar的类,使用XIB实现工具条

Center 13

2.4 新建XIB对工具条进行描述

Center 14

2.5 因为绑定的是继承于UIToolbar的自定义类,而XIB中是默认继承于View的,所以要将其删除重新拖进一个UIToolbar组件,如下所示:

Center 15

2.6 往UIToolbar组件内拖进 相应的Item和弹簧,与上面相同,并与创建的自定义组件类进行绑定如下所示:

Center 16

2.7 绑定后 即可拖线实现响应的Item事件。

Center 17

2.8 因为单独抽取了出来,要想在控制器内响应Item的事件,需要使用代理进行通知。在自定义的类中添加协议,一般情况下,与自定义控件相关的协议中的方法参数都要包含此控件(以便在控制器中修改自定义控件的属性)和 内部的Item或Button(便于根据Tag值对不同的Item进行事件处理)

Center 18

2.9 需要注意的是在为自定义控件设置遵循协议的代理属性(id类型)时,不要将代理名称和父类中的代理属性名重合,否则会造成混乱。如下所示:

Center 19

判断代理属性是否实现了协议方法,避免出错:

Center 20

剩余步骤如下:

Center 21

Center 22

运行结果如下:

Center 23

工程如下:

自定义工具条 CZKeyboardToolbar.h

  1. //
  2. // CZKeyboardToolbar.h
  3. // DatePicker(键盘)
  4. //
  5. // Created by 刘刘勋 on 16/1/3.
  6. // Copyright © 2016年 aaaaa. All rights reserved.
  7. //
  8. #import <UIKit/UIKit.h>
  9. @class CZKeyboardToolbar;
  10. @protocol CZKeyboardToolbarDelegate <NSObject>
  11. @optional
  12. -(void)keyboardToolbar:(CZKeyboardToolbar *)toolbar btnSelected:(UIBarButtonItem *)item;
  13. @end
  14. @interface CZKeyboardToolbar : UIToolbar
  15. +(instancetype)toolbar;
  16. @property (weak, nonatomic) id <CZKeyboardToolbarDelegate> kbDelegate; // 键盘的代理
  17. @end

CZKeyboardToolbar.m

  1. //
  2. // CZKeyboardToolbar.m
  3. // DatePicker(键盘)
  4. //
  5. // Created by 刘刘勋 on 16/1/3.
  6. // Copyright © 2016年 aaaaa. All rights reserved.
  7. //
  8. #import "CZKeyboardToolbar.h"
  9. @interface CZKeyboardToolbar()
  10. @end
  11. @implementation CZKeyboardToolbar
  12. +(instancetype)toolbar{
  13. return [[[NSBundle mainBundle] loadNibNamed:@"CZKeyboardToolbar" owner:nil options:nil] lastObject];
  14. }
  15. - (IBAction)itemBtnClick:(id)sender {
  16. // 判断代理方法有没有实现
  17. if ([self.kbDelegate respondsToSelector:@selector(keyboardToolbar:btnSelected:)]) {
  18. [self.kbDelegate keyboardToolbar:self btnSelected:sender];
  19. }
  20. }
  21. @end

viewController.m

  1. //
  2. // ViewController.m
  3. // DatePicker(键盘)
  4. //
  5. // Created by 刘刘勋 on 16/1/3.
  6. // Copyright © 2016年 aaaaa. All rights reserved.
  7. //
  8. #import "ViewController.h"
  9. #import "CZKeyboardToolbar.h"
  10. @interface ViewController ()<CZKeyboardToolbarDelegate>
  11. @property(nonatomic, strong)UIDatePicker *datepicker;
  12. @property (weak, nonatomic) IBOutlet UITextField *textField;
  13. @end
  14. @implementation ViewController
  15. - (void)viewDidLoad {
  16. [super viewDidLoad];
  17. // 创建一个datePicker
  18. self.datepicker = [[UIDatePicker alloc] init];
  19. // 本地化
  20. self.datepicker.locale = [[NSLocale alloc] initWithLocaleIdentifier:@"zh"];
  21. // 日期控件的格式
  22. self.datepicker.datePickerMode = UIDatePickerModeDate;
  23. // 设置textField的键盘
  24. self.textField.inputView = self.datepicker;
  25. CZKeyboardToolbar *toolbar = [CZKeyboardToolbar toolbar];
  26. toolbar.kbDelegate = self;
  27. // 设置textField的辅助工具条
  28. self.textField.inputAccessoryView = toolbar;
  29. }
  30. #pragma mark- 自定义辅助工具条的代理方法
  31. -(void)keyboardToolbar:(CZKeyboardToolbar *)toolbar btnSelected:(UIBarButtonItem *)item
  32. {
  33. NSLog(@"XXXXXX");
  34. if (item.tag == 2) {
  35. // 获取日期显示在textField
  36. NSDate *date = self.datepicker.date;
  37. NSLog(@"%@", date);
  38. // 日期转字符串
  39. NSDateFormatter *formatter = [[NSDateFormatter alloc] init];
  40. // 设置日期格式
  41. formatter.dateFormat = @"yyyy-MM-dd";
  42. NSString *dateStr = [formatter stringFromDate:date];
  43. self.textField.text = dateStr;
  44. }
  45. }
  46. /*
  47. 代码创建的toolbar
  48. */
  49. -(void)codeForToolbar{
  50. // 代码创建UIToolbar
  51. UIToolbar *toolbar = [[UIToolbar alloc] init];
  52. toolbar.backgroundColor = [UIColor grayColor];
  53. // 屏幕宽度
  54. CGFloat screenW = [[UIScreen mainScreen] bounds].size.width;
  55. toolbar.bounds = CGRectMake(0, 0, screenW, 44);
  56. UIBarButtonItem *previousBtn = [[UIBarButtonItem alloc] initWithTitle:@"上一个" style:UIBarButtonItemStylePlain target:self action:nil];
  57. UIBarButtonItem *nextBtn = [[UIBarButtonItem alloc] initWithTitle:@"下一个" style:UIBarButtonItemStylePlain target:self action:nil];
  58. UIBarButtonItem *doneBtn = [[UIBarButtonItem alloc] initWithTitle:@"done" style:UIBarButtonItemStylePlain target:self action:nil];
  59. // 固定长度的按钮——不可拉伸的弹簧
  60. UIBarButtonItem *fixedItem = [[UIBarButtonItem alloc] initWithBarButtonSystemItem:UIBarButtonSystemItemFixedSpace target:nil action:nil];
  61. // 代码实现要设置宽度
  62. fixedItem.width = 20;
  63. // 可拉伸的弹簧组件
  64. UIBarButtonItem *flexibleItem = [[UIBarButtonItem alloc] initWithBarButtonSystemItem:UIBarButtonSystemItemFlexibleSpace target:nil action:nil];
  65. // 往UIToolbar里添加按钮
  66. toolbar.items = @[previousBtn,fixedItem,nextBtn,flexibleItem,doneBtn];
  67. }
  68. - (void)didReceiveMemoryWarning {
  69. [super didReceiveMemoryWarning];
  70. // Dispose of any resources that can be recreated.
  71. }
  72. @end

发表评论

表情:
评论列表 (有 0 条评论,323人围观)

还没有评论,来说两句吧...

相关阅读