记录于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];
}
 
 

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

  1. js键盘事件全面控制详解

      js键盘事件全面控制 主要分四个部分第一部分:浏览器的按键事件第二部分:兼容浏览器第三部分:代码实现和优化第四部分:总结 第一部分:浏览器的按键事件 用js实现键盘记录,要关注浏览器的三种按键事件 ...

  2. js键盘事件全面控制

    js键盘事件全面控制 主要分四个部分第一部分:浏览器的按键事件第二部分:兼容浏览器第三部分:代码实现和优化第四部分:总结 第一部分:浏览器的按键事件 用js实现键盘记录,要关注浏览器的三种按键事件类型 ...

  3. js键盘事件全面控制详解【转】

    js键盘事件全面控制 主要分四个部分第一部分:浏览器的按键事件第二部分:兼容浏览器第三部分:代码实现和优化第四部分:总结 第一部分:浏览器的按键事件 用js实现键盘记录,要关注浏览器的三种按键事件类型 ...

  4. JavaScript键盘事件全面控制代码

    JavaScript键盘事件全面控制,它可以捕获键盘事件的输入状态,可以判断你敲打了键盘的那个键,ctrl.shift,26个字母等等,返回具体键盘值. <html> <head&g ...

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

    在网上查询的按键码如下: 一.键盘按键和键盘对应代码表:   字母按键码A <--------> 65 B <--------> 66 C <--------> 6 ...

  6. js浏览器键盘事件控制(转自新浪微博)

    js键盘事件全面控制 主要分四个部分第一部分:浏览器的按键事件第二部分:兼容浏览器第三部分:代码实现和优化第四部分:总结 第一部分:浏览器的按键事件 用js实现键盘记录,要关注浏览器的三种按键事件类型 ...

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

    我们写界面要考虑很多用户体验问题,键盘事件的响应就是比较麻烦的一种.我们需要监听键盘事件,考虑点击背景收起键盘.考虑键盘遮挡输入框问题等等,而且每个界面都要做这么一套.这个库帮我们解决了这个事情. 这 ...

  8. IOS中input键盘事件支持的解决方法

    欢迎大家去我的网站详细查看http://genghongshuo.com.cn/ IOS中input键盘事件keyup.keydown.等支持不是很好, 用input监听键盘keyup事件,在安卓手机 ...

  9. iOS 键盘自适应(IQKeyboardManager)使用小结

    IQKeyboardManager Github地址 经常在开发一个应用程序,我们遇到了一个问题,iPhone的键盘上滑覆盖的UITextField / UITextView.IQKeyboardMa ...

随机推荐

  1. HBase基本概念与基本使用

    1. HBase简介 1.1 什么是HBase HBASE是一个高可靠性.高性能.面向列.可伸缩的分布式存储系统,利用HBASE技术可在廉价PC Server上搭建起大规模结构化存储集群. HBASE ...

  2. mysql MHA扩展haproxy搭建从库只读负载均衡

    [环境介绍] 系统环境:Red Hat Enterprise Linux 7 + 5.7.18 + MHA version 0.57 MHA架构中从库之间的负责均衡可选择mysql_route& ...

  3. 隧道6in4 和隧道6to4(GNS3)

    隧道6in4实验配置 拓扑图 Device Interface IP Address(IPv6) R1 F 0/0 10.1.81.1 F 0/1 2001:db8:cafe:81::10 R2 F ...

  4. D. Vanya and Treasure Codeforces Round #355 (Div. 2)

    http://codeforces.com/contest/677/problem/D 建颗新树,节点元素包含r.c.dis,第i层包含拥有编号为i的钥匙的所有节点.用i-1层更新i层,逐层更新到底层 ...

  5. Web安全基础——小白自学

    2019-02-23   19:41:49 话不多说,直接分享我学习到的东西~ Web万维网(World Wide Web,WWW),这个名称我们熟悉不过啦.跟它密切相关就是HTTP,叫做超文本传输协 ...

  6. Git分支实战入门详细图解

    现在我们模拟一个简单的分支和合并案例,其中工作流可供真实项目借鉴. (1)在master开展工作 (2)为新的需求创建分支 (3)在新的分支上展开工作 这时,你接到一个电话,说项目有一个严重的问题需要 ...

  7. 微信小程序出现 Expecting 'STRING','NUMBER','NULL','TRUE','FALSE','{','[', got INVALID

    是因为,app.json中不能有注释,我将我上面注释的部分去掉,就可以了

  8. 找出链表中倒数第K个结点

    思路:两个指针,也是快指针和慢指针,先让快指针走k -1步,这时慢指针开始和快指针一起走到尾部.慢指针停止的点就是倒数第k个节点. public static ListNode findCountDo ...

  9. centos 7.2 安装mongodb 3.4.4免编译

    /根目录下: 获取命令: wget https://fastdl.mongodb.org/linux/mongodb-linux-x86_64-3.4.4.tgz 解压命令: tar zvxf mon ...

  10. Nginx开启gzip压缩解决react打包文件过大

    用create-react-app创建的react应用打包之后的build js有1M之多. 采用gzip打包传输,可以节约70%左右的带宽 nginx采用gzip打包方式 在nginx配置中添加如下 ...