UIDatePicer&键盘的处理

"【案例: DatePicker&键盘处理】"

》掌握DatePicker本地化的设置

(1)storyboard设置本地化

(2)获取系统可以的本地化[NSLocale availableLocaleIdentifiers]

(3)代码设置日期的本地化

》掌握DataPikcer的日期格式设置

(1)storybard设置日期格式

(2)代码设置日期格式 datePickerMode属性

》掌握UITextField如果弹出日期选择器并在键盘添加工具条

(1)设置UITextField的inputView属性为日期选择器即可

(2)熟悉UIToolbar的使用,添加UIBarButtonItem

(3)自定义一个键盘工具条,添加在键盘上

UITextField,设置的inputAccessoryView属性

(4)通过代理监听键盘工具条的几个按钮

》熟悉代码实现UIToolBar

"注:

"1.创建ToolBar要设置frm

"2.添加固定弹簧时,一定要设置宽度

Launchxxx.xib 运行出现红色,因为项目名称有个特殊符号“&”,导致编译时出现问题。但在iOS9就没有出现问题。

Main.story.board

一个是固定弹簧,一个是灵活弹簧。

ViewController.m

//

//  ViewController.m

//  DatePicker&键盘的处理

//

//  Created by huan on 16/1/13.

//  Copyright © 2016年 huanxi. All rights reserved.

//

#import "ViewController.h"

#import "CZKeyboardToolbar.h"

@interface ViewController ()<CZKeyboardToolbarDelegate>

@property (strong, nonatomic) UIDatePicker *datePicker;

@property (weak, nonatomic) IBOutlet UITextField *textField;

@end

@implementation ViewController

- (void)viewDidLoad {

[super viewDidLoad];

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

//创建datepicker

self.datePicker = [[UIDatePicker alloc] init];

//设置日期控制的本地化

//    NSLog(@"%@",[NSLocale availableLocaleIdentifiers]);

self.datePicker.locale = [[NSLocale alloc] initWithLocaleIdentifier:@"zh"];

//日期控件格式

self.datePicker.datePickerMode = UIDatePickerModeDate;

//设置textfield的键盘

self.textField.inputView = self.datePicker;

CZKeyboardToolbar *toolbar = [CZKeyboardToolbar toolbar];

//设置键盘的代理

toolbar.kbdelegate = self;

/**

* 代码创建toolbar

*/

//    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:nil action:nil];

//    UIBarButtonItem *nextBtn = [[UIBarButtonItem alloc] initWithTitle:@"下一个" style:UIBarButtonItemStylePlain target:nil action:nil];

//    UIBarButtonItem *downBtn = [[UIBarButtonItem alloc] initWithTitle:@"Done" style:UIBarButtonItemStylePlain target:nil action:nil];

//    //固定长度的按钮

//    UIBarButtonItem *fixedBtn = [[UIBarButtonItem alloc] initWithBarButtonSystemItem:UIBarButtonSystemItemFixedSpace target:nil action:nil];

//    //代码实现要设置宽度

//    fixedBtn.width = 10;

//    //可拉伸的按钮

//    UIBarButtonItem *flexable = [[UIBarButtonItem alloc] initWithBarButtonSystemItem:UIBarButtonSystemItemFlexibleSpace target:nil action:nil];

//

//

//

//    //添加UIToolbar里面的按钮

//    toolbar.items = @[previousBtn, fixedBtn, nextBtn, flexable, downBtn];

//设置textfield 的辅助工具条

self.textField.inputAccessoryView = toolbar;

//代码创建UIToolbar

}

#pragma mark 自定义键盘工具条的代理方法

-(void)keyboardToolbar:(CZKeyboardToolbar *)toolbar btndidselected:(UIBarButtonItem *)item{

if (item.tag == 2) {

//获取日期显示在textField

NSDate *date = self.datePicker.date;

NSLog(@"%@", date);

//日期转字符串

NSDateFormatter *dateFormatter = [[NSDateFormatter alloc] init];

//设置日期格式

dateFormatter.dateFormat = @"yyyyMMdd";

NSString *dateStr = [dateFormatter stringFromDate:date];

self.textField.text = dateStr;

}

}

- (void)didReceiveMemoryWarning {

[super didReceiveMemoryWarning];

// Dispose of any resources that can be recreated.

}

@end

下面是封装的类,减少代码量

CZKeyboardToolbar.h

//

//  CZKeyboardToolbar.h

//  DatePicker&键盘的处理

//

//  Created by huan on 16/1/13.

//  Copyright © 2016年 huanxi. All rights reserved.

//

#import <UIKit/UIKit.h>

@class CZKeyboardToolbar;

@protocol CZKeyboardToolbarDelegate<NSObject>

@optional

/**

* Item.tag == 0 表示上一页 1 下一页 2 Down

*/

-(void)keyboardToolbar:(CZKeyboardToolbar *)toolbar btndidselected:(UIBarButtonItem *)item;

@end

@interface CZKeyboardToolbar : UIToolbar

+(instancetype) toolbar;

@property (weak, nonatomic) id<CZKeyboardToolbarDelegate>kbdelegate;//为什么不是delegate,因为UIToolbar 有属性delegate;

@end

CZKeyboardToolbar.m

//

//  CZKeyboardToolbar.m

//  DatePicker&键盘的处理

//

//  Created by huan on 16/1/13.

//  Copyright © 2016年 huanxi. All rights reserved.

//

#import "CZKeyboardToolbar.h"

@interface CZKeyboardToolbar()

@end

@implementation CZKeyboardToolbar

/*

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

// An empty implementation adversely affects performance during animation.

- (void)drawRect:(CGRect)rect {

// Drawing code

}

*/

+(instancetype) toolbar{

return [[[NSBundle mainBundle] loadNibNamed:@"CZKeyboardToolbar" owner:nil options:nil] lastObject];

//因为xib的控件可以多拖几个,是同一级的

}

- (IBAction)itemBtnclick:(id)sender {

//判断代理有没有实现方法

if([self.kbdelegate respondsToSelector:@selector(keyboardToolbar:btndidselected:)]){

[self.kbdelegate keyboardToolbar:self btndidselected:sender];

}

}

@end

CZKeyboardToolbar.xib

在同一控制器中如果选中,那么不用代理,但是如果你用控件来改变界面显示的值,可以用代理。仔细体会一下。

时间: 2024-10-14 22:11:08

UIDatePicer&键盘的处理的相关文章

xcode模拟器不显示键盘解决方案

当我们使用Xcode进行开发的时候,并不是所有的时候都需要将代码运行在iPhone,有时候模拟器就可以解决这些问题, 但是当你使用模拟器的时候会发现,在TextFiled中输入信息时,如果你是用模拟器上的键盘进行操作,OK没问题, 但是当你是用键盘输入信息的话,那么你会发现模拟器上的键盘就不会再显示了 这是因为,xcode默认情况下,使用电脑键盘作为外接键盘,不再弹出虚拟键盘. 你可以这样做: 运行模拟器,然后 hardware -> keyboard -> connect hardware

解决安卓手机键盘弹出时会把背景或百分比定位的布局压缩的问题

做移动端页面时经常遇到以下案例,在有背景的页面上写表单,而且底部为了适应不同手机还得运用绝对定位,因为通常是把容器高度设为了100%,这时在安卓手机上弹窗软键盘时就会把背景图片及其他东西挤压上去,解决方法如下: 在css样式中把大容器定义为fixed布局 .wrap{ position:fixed;left:0;top:0; } 在js中强制把页面的高度覆给他,就相当于自动撑开 var x =document.body.clientWidth; //查询设备的宽度 var y =document

前端angularJS利用directive实现移动端自定义软键盘的方法

最近公司项目的需求上要求我们iPad项目上一些需要输入数字的地方用我们自定义的软键盘而不是移动端设备自带的键盘,刚接到需求有点懵,因为之前没有做过,后来理了一下思路发现这东西也就那样.先看一下实现之后的效果: 实现的效果就是当点击页面中需要弹出软键盘的时候软键盘弹出,浮在页面的中间,和模态框一样的效果,可以在软键盘中输入任何数字,附带的功能有小数点.退格.清空.确定等功能.当在键盘上点击数字的时候页面中的表单中实时的添加对应的数字,上图中可以看到. 产品经理那边给的原因是iPad屏幕本来就小,如

ios 键盘追加完成按钮

//键盘追加完成按钮 UIToolbar * topView = [[UIToolbar alloc]initWithFrame:CGRectMake(0, 0, 320, 30)]; [topView setBarStyle:UIBarStyleDefault]; UIBarButtonItem * btnSpace = [[UIBarButtonItem alloc]initWithBarButtonSystemItem:UIBarButtonSystemItemFlexibleSpace

移动端 input 获取焦点后弹出带enter(类似于搜索,确定,前往)键盘,以及隐藏系统键盘

一:调出系统带回车键的键盘 在项目中经常有输入框,当输入完成后点击确定执行相应的动作.但是有些设计没有确定或者搜索按钮,这就需要调用系统键盘,点击系统键盘的确定后执行相应动作. 但是单纯的input是无法实现的,要想调出带回车的键盘必须把input放在form表单里面才可以,并且得加上action(一定要加),下面是个简单的例子. <form action class="search" onsubmit="return false;"> <i cl

13.Linux键盘按键驱动 (详解)

版权声明:本文为博主原创文章,未经博主允许不得转载. 在上一节分析输入子系统内的intput_handler软件处理部分后,接下来我们开始写input_dev驱动 本节目标: 实现键盘驱动,让开发板的4个按键代表键盘中的L.S.空格键.回车键 1.先来介绍以下几个结构体使用和函数,下面代码中会用到 1)input_dev驱动设备结构体中常用成员如下: struct input_dev { void *private; const char *name; //设备名字 const char *ph

通过键盘接收数值和字符,实现计算器功能。

import java.util.Scanner; /** * @author 蓝色以太 * 通过键盘接收数值和字符,实现计算器功能. */ public class Calculator { public static void main(String[] args) { Scanner sc=new Scanner(System.in); System.out.println("请输入第一个数值:"); double num1=sc.nextDouble(); System.out

.Net WinForm 控件键盘消息处理剖析

在WinForm控件上我们可以看到很多关于键盘消息处理的方法,比如OnKeyDown, OnKeyPress, ProcessCmdKey, ProcessDialogKey,IsInputKey等等,那么这些方法是如何被组织的,每一个方法的具体含义又是什么哪?Win32的键盘消息又是如何到达控件上的这些方法的,本文将着重阐述这些问题,对.Net WinForm控件的键盘消息处理过程进行剖析.  1.      WinForm消息循环 大家都知道WinForm也是依赖于底层的消息机制的,通常我们

iOS全局处理键盘事件

转自:http://www.cnblogs.com/xinus/archive/2013/01/22/ios-keybord-notification.html 注册监听键盘事件的通知 [[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(keyboardWillShow:) name:UIKeyboardWillShowNotification object:nil]; [[NSNotificatio