iOS键盘事件实现、控制

记录于2013/6/26:

一.点击键盘上的“Done”按钮关闭键盘

1.视图控制器实现UITextFieldDelegate协议

2.设置文本框属性

textField.returnKeyType = UIReturnKeyDone;

textField.delegate=self;

3. 重写协议方法

- (BOOL)textFieldShouldReturn:(UITextField *)textField

{

[textFieldresignFirstResponder];

// the user pressed the "Done" button, so dismiss the keyboard

returnYES;

}

二.点击键盘上的“Next”按钮实现文本框焦点跳转

1.视图控制器实现UITextFieldDelegate协议

2.设置文本框属性

tx_username.returnKeyType = UIReturnKeyNext;

tx_username.delegate =self;

3.重写协议方法

- (BOOL)textFieldShouldReturn:(UITextField *)textField

{

if([tx_username isFirstResponder]) {

[tx_email becomeFirstResponder];

}elseif([tx_email isFirstResponder]) {

[tx_password becomeFirstResponder];

} elseif([tx_password isFirstResponder]) {

[tx_conPassword becomeFirstResponder];

} elseif([tx_conPassword isFirstResponder]) {

[self performSelector:@selector(userRegister)];//tx_conPassword指定了<span style="font-family: Menlo; font-size: 11px;">UIReturnKeyJoin类型后调用的方法</span></span>

}

returnYES;

}


UIScrollView页面下点击TextField键盘事件:

不能改变scrollView的frame,得改变contentOffSet调整。

(1)

#pragma mark

#pragma mark - Textfield delegate

//增加手势  点击输入框以外区域降下键盘

-(void)RegisterViewAddGest:(UIImageView *)view {

view.userInteractionEnabled = YES;

//单击事件

UITapGestureRecognizer *taprecognizer;

taprecognizer = [[UITapGestureRecognizer alloc]initWithTarget:self action:@selector(RegisterKeyDown:)];

taprecognizer.numberOfTapsRequired = 1;

[view addGestureRecognizer:taprecognizer];

[taprecognizer release];

}

//键盘下降的时候

-(void)RegisterKeyDown:(UITapGestureRecognizer *)taprecognizer{

DebugLog(@"点击背景键盘下降");

if (taprecognizer.numberOfTapsRequired == 1) {

[self.nameTextField resignFirstResponder];

[self.phoneTextField resignFirstResponder];

[self.addressTextField resignFirstResponder];

[self.goodsTextField resignFirstResponder];

[self.numberTextField resignFirstResponder];

[self.timeTextField resignFirstResponder];

[self.attendTextField resignFirstResponder];

NSTimeInterval animationDuration = 0.30f;

[UIView beginAnimations:@"ResizeForKeyboard"context:nil];

[UIView setAnimationDuration:animationDuration];

if (self.buyNowScrollView.contentOffset.y >= self.buyNowScrollView.contentSize.height - self.buyNowScrollView.frame.size.height) {

self.buyNowScrollView.contentOffset = CGPointMake(0, self.buyNowScrollView.contentSize.height - self.buyNowScrollView.frame.size.height);

}

[UIViewcommitAnimations];

}

}

//输入框return的时候

-(BOOL)textFieldShouldReturn:(UITextField *)textField

{

if ([textField isEqual:self.nameTextField]) {

[self.phoneTextFieldbecomeFirstResponder];

}elseif ([textField isEqual:self.phoneTextField]) {

[self.addressTextFieldbecomeFirstResponder];

}elseif ([textField isEqual:self.addressTextField]) {

[self.goodsTextFieldbecomeFirstResponder];

}elseif ([textField isEqual:self.goodsTextField]) {

[self.numberTextFieldbecomeFirstResponder];

}elseif ([textField isEqual:self.numberTextField]) {

[self.timeTextFieldbecomeFirstResponder];

}elseif ([textField isEqual:self.timeTextField]) {

[self.attendTextFieldbecomeFirstResponder];

}else {

DebugLog(@"输入框return的时候");

[textField resignFirstResponder];

NSTimeInterval animationDuration = 0.30f;

[UIViewbeginAnimations:@"ResizeForKeyboard"context:nil];

[UIViewsetAnimationDuration:animationDuration];

self.buyNowScrollView.contentOffset = CGPointMake(0, self.buyNowScrollView.contentSize.height - self.buyNowScrollView.frame.size.height);

[UIViewcommitAnimations];

}

returnYES;

}

//输入框弹出的时候

- (void)textFieldDidBeginEditing:(UITextField *)textField

{

DebugLog(@"键盘弹出");

CGRect frame = textField.frame;

int offset = frame.origin.y + 70 - (self.view.frame.size.height - 216.0);//键盘高度216

NSTimeInterval animationDuration = 0.30f;

[UIView beginAnimations:@"ResizeForKeyBoard"context:nil];

[UIView setAnimationDuration:animationDuration];

if(offset > 0)

{

self.buyNowScrollView.contentOffset = CGPointMake(0, offset + 10);

}else{

self.buyNowScrollView.contentOffset = CGPointMake(0, 0);

}

[UIView commitAnimations];

}

(2)改写(1)的,更加稳定适用了   暂时还是很完美的

里面的都是textField嵌入在scroll里面的使用

#pragma mark - UITextFieldDelegate

- (BOOL)textFieldShouldReturn:(UITextField *)textField{

//401为普通会员账号 402为普通会员密码 403为普通会员密码确认 404为普通会员昵称

//411为发型师会员账号 412为发型师会员密码 413为发型师会员密码确认 414为发型师会员姓名 415为发型师会员手机

//键盘高度216

if(textField.tag <= 404){

if ([textField isEqual:self.commonUserText]) {

[self.commonPassTextbecomeFirstResponder];

}elseif ([textField isEqual:self.commonPassText]){

[self.commonRepeatPassTextbecomeFirstResponder];

}elseif ([textField isEqual:self.commonRepeatPassText]){

[self.commonNickTextbecomeFirstResponder];

}else{

for (UIView *subView inself.commonScrollView.subviews) {

if ([subView isKindOfClass:[UITextFieldclass]]) {

[subView resignFirstResponder];

}

}

if (self.commonScrollView.contentSize.height - self.commonScrollView.contentOffset.y < self.commonScrollView.frame.size.height) {

[self.commonScrollViewsetContentOffset:CGPointMake(0, self.commonScrollView.contentSize.height - self.commonScrollView.frame.size.height) animated:YES];

}

}

}else{

if ([textField isEqual:self.barberUserText]) {

[self.barberPassTextbecomeFirstResponder];

}elseif ([textField isEqual:self.barberPassText]){

[self.barberRepeatPassTextbecomeFirstResponder];

}elseif ([textField isEqual:self.barberRepeatPassText]){

[self.barberNickTextbecomeFirstResponder];

}elseif ([textField isEqual:self.barberNickText]){

[self.barberTelphoneTextbecomeFirstResponder];

}else{

for (UIView *subView inself.barberScrollView.subviews) {

if ([subView isKindOfClass:[UITextFieldclass]]) {

[subView resignFirstResponder];

}

}

//scroll的内容高度 - scroll的contentOffSet高度 < scroll的frane高度

if (self.barberScrollView.contentSize.height - self.barberScrollView.contentOffset.y < self.barberScrollView.frame.size.height) {

[self.barberScrollViewsetContentOffset:CGPointMake(0, self.barberScrollView.contentSize.height - self.barberScrollView.frame.size.height) animated:YES];

}

}

}

returnYES;

}

- (void)textFieldDidBeginEditing:(UITextField *)textField{

//401为普通会员账号 402为普通会员密码 403为普通会员密码确认 404为普通会员昵称

//411为发型师会员账号 412为发型师会员密码 413为发型师会员密码确认 414为发型师会员姓名 415为发型师会员手机

//键盘高度216

CGRect frame = textField.frame;

int offset;

if(textField.tag <= 404){

//scroll的y坐标 + textField在Scroll上的y坐标 + textField高度 - 除键盘高度外屏幕高度

offset = frame.origin.y + 110 + 30 + 6 - (SCREEN_HEIGHT - 252);

NSTimeInterval animationDuration = 0.30f;

[UIViewbeginAnimations:@"ResizeForKeyBoard"context:nil];

[UIViewsetAnimationDuration:animationDuration];

if(offset > 0)

{

[self.commonScrollViewsetContentOffset:CGPointMake(0, offset) animated:YES];

}else{

[self.commonScrollViewsetContentOffset:CGPointMake(0, 0) animated:YES];

}

[UIViewcommitAnimations];

}else {

NSLog(@"%f",SCREEN_HEIGHT);

offset = frame.origin.y + 146 - (SCREEN_HEIGHT - 252);

if(offset > 0)

{

[self.barberScrollViewsetContentOffset:CGPointMake(0, frame.origin.y + 146 - (SCREEN_HEIGHT - 252)) animated:YES];

}else{

[self.barberScrollViewsetContentOffset:CGPointMake(0, 0) animated:YES];

}

}

}

- (void)textFieldDidEndEditing:(UITextField *)textField{

//scroll的内容高度 - scroll的contentOffSet高度 < scroll的frane高度

if (self.commonScrollView.contentSize.height - self.commonScrollView.contentOffset.y < self.commonScrollView.frame.size.height) {

[self.commonScrollViewsetContentOffset:CGPointMake(0, self.commonScrollView.contentSize.height - self.commonScrollView.frame.size.height) animated:YES];

}

if (self.barberScrollView.contentSize.height - self.barberScrollView.contentOffset.y < self.barberScrollView.frame.size.height) {

[self.barberScrollViewsetContentOffset:CGPointMake(0, self.barberScrollView.contentSize.height - self.barberScrollView.frame.size.height) animated:YES];

}

}


UIView下的界面移动避免键盘遮盖方法:

- (void)keyboardWillShow:(NSNotification *)noti

{

//键盘输入的界面调整

//键盘的高度

float height = 216.0;

CGRect frame = self.view.frame;

frame.size = CGSizeMake(frame.size.width, frame.size.height - height);

[UIView beginAnimations:@"Curl"context:nil];//动画开始

[UIView setAnimationDuration:0.30];

[UIView setAnimationDelegate:self];

[self.view setFrame:frame];

[UIView commitAnimations];

}

- (BOOL)textFieldShouldReturn:(UITextField *)textField

{

// When the user presses return, take focus away from the text field so that the keyboard is dismissed.

NSTimeInterval animationDuration = 0.30f;

[UIView beginAnimations:@"ResizeForKeyboard" context:nil];

[UIView setAnimationDuration:animationDuration];

CGRect rect = CGRectMake(0.0f, 0.0f, self.view.frame.size.width, self.view.frame.size.height);

self.view.frame = rect;

[UIView commitAnimations];

[textField resignFirstResponder];

return YES;

}

- (void)textFieldDidBeginEditing:(UITextField *)textField

{

CGRect frame = textField.frame;

int offset = frame.origin.y + 70 - (self.view.frame.size.height - 216.0); //键盘高度216 ,向上提多少在这里改

NSTimeInterval animationDuration = 0.30f;

[UIView beginAnimations:@"ResizeForKeyBoard" context:nil];

[UIView setAnimationDuration:animationDuration];

float width = self.view.frame.size.width;

float height = self.view.frame.size.height;

if(offset > 0)

{

CGRect rect = CGRectMake(0.0f, -offset,width,height);

self.view.frame = rect;

}

[UIView commitAnimations];

}

原文地址:https://www.cnblogs.com/ios-wmm/p/10215973.html

时间: 2024-08-04 18:27:45

iOS键盘事件实现、控制的相关文章

JavaScript键盘事件全面控制代码

JavaScript键盘事件全面控制,它可以捕获键盘事件的输入状态,可以判断你敲打了键盘的那个键,ctrl.shift,26个字母等等,返回具体键盘值. <html> <head> <meta http-equiv="Content-Type" content="text/html; charset=UTF-8"> <title>键盘事件全面控制</title> <style type="t

js键盘事件全面控制详解

js键盘事件全面控制 主要分四个部分第一部分:浏览器的按键事件第二部分:兼容浏览器第三部分:代码实现和优化第四部分:总结 第一部分:浏览器的按键事件 用js实现键盘记录,要关注浏览器的三种按键事件类型,即keydown,keypress和keyup,它们分别对应onkeydown. onkeypress和onkeyup这三个事件句柄.一个典型的按键会产生所有这三种事件,依次是keydown,keypress,然后是按键释放时候的keyup. 在这3种事件类型中,keydown和keyup比较底层

Js键盘事件全面控制,回车按键事件,键盘对应按键码,按键事件兼容各个浏览器。

作者:827969653 在网上查询的按键码如下: 一.键盘按键和键盘对应代码表:   字母按键码A <--------> 65 B <--------> 66 C <--------> 67 D <--------> 68 E <--------> 69 F <--------> 70 G <--------> 71 H <--------> 72 I <--------> 73 J <--

js键盘事件全面控制

主要分四个部分第一部分:浏览器的按键事件第二部分:兼容浏览器第三部分:代码实现和优化第四部分:总结 第一部分:浏览器的按键事件 用 js实现键盘记录,要关注浏览器的三种按键事件类型,即keydown,keypress和keyup,它们分别对应onkeydown. onkeypress和onkeyup这三个事件句柄.一个典型的按键会产生所有这三种事件,依次是keydown,keypress,然后是按键释放时 候的keyup. 在这3种事件类型中,keydown和keyup比较底层,而 keypre

键盘事件-键代码编号

<html> <head> <meta http-equiv="Content-Type" content="text/html; charset=UTF-8"> <title>键盘事件全面控制</title> <style type="text/css"> td {text-align:center} </style> <script language=&

ios ---键盘的监听事件

//在view将要出现的时候重载viewWillAppear方法添加通知 监听事件 keyboardWillShow:  keyboardWillHide: - (void)viewWillAppear:(BOOL)animated { [super viewWillAppear:animated]; [[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(keyboardWillShow:) name:

(四)WebDriver API:控制浏览器及鼠标、键盘事件

参考文档:WebDriver官方文档,下载链接:http://download.csdn.net/detail/kwgkwg001/4004500 虫师:<selenium2自动化测试实战-基于python语言> 一.控制浏览器 webdriver主要提供操作页面上各种元素的方法,但它也提供操作浏览器的一些方法,例如控制浏览器大小.前进和后退等. 1.控制浏览器窗口大小 webdriver提供了set_window_size()方法来设置浏览器大小: # 控制浏览器大小 from seleni

【Unity 3D】学习笔记四十六:输入与控制——键盘事件

在游戏中,玩家控制主角移动,按键攻击,选择行走.都需要在程序中监听玩家的输入.unity为开发者提供了input库,来支持键盘事件,鼠标事件以及触摸事件.本文主要回顾键盘事件,以后会逐文复习鼠标以及触摸事件. 键盘事件 一般的PC键盘有104个不同的按键,在程序中通过监听这些按键事件,从而进一步执行逻辑操作.如:射击游戏中,W表示前进,S表示后退,A表示左移,D表示右移. 按下事件 在脚本中,用input.GetKeyDown( )方法将按键值作为参数,监听此按键是否被按下.按下返回true,否

iOS自动处理键盘事件的第三方库:IQKeyboardManager

我们写界面要考虑很多用户体验问题,键盘事件的响应就是比较麻烦的一种.我们需要监听键盘事件,考虑点击背景收起键盘.考虑键盘遮挡输入框问题等等,而且每个界面都要做这么一套.这个库帮我们解决了这个事情. 这个库的下载地址:https://github.com/hackiftekhar/IQKeyboardManager 这个库是一个单例,它一旦生效,全项目任何界面都有效.让它生效的代码可以写在任意位置,我写在AppDelegate里. 1 - (BOOL)application:(UIApplicat