zoukankan      html  css  js  c++  java
  • 如何解决UITextField挡住键盘的问题

    1. 先创建一个UIViewController  这个UIViewController作为父类,让以后的每一个界面继承这个界面,在这个界面里面实现一个委托,代码如下:


    @interface BaseViewController : UIViewController <UITextFieldDelegate>


    2.在这个BaseViewCOntroller.m文件中,现实UITextFieldDelegate中的两个方法,textFieldDidBeginEditing(开始编辑UITextField和 textFieldDidEndEditing(结 束编辑UITextField),大家都知道,iphone的键盘都是固定的,都是系统自带的,没有第三方的输入法的,所以键盘的高度是固定的216,我 们只要在开始编辑的时候,计算一下当前的UITextField的所在高度相对底部是否有216(就是UITextField的底部边缘相对屏幕的底部是 否有216个长度),如果不够216,就需要把整体的view上移达到216高度即可;当我们结束编辑的时候,把之前增加的高度相反操作即可,代码如下:

    //设置调整界面的动画效果//设置调整界面的动画效果

    int prewTag ;  //编辑上一个UITextField的TAG,需要在XIB文件中定义或者程序中添加,不能让两个控件的TAG相同
    float prewMoveY; //编辑的时候移动的高度
    
    // 下面两个方法是为了防止TextFiled让键盘挡住的方法
    /**
     开始编辑UITextField的方法
     */
    -(void) textFieldDidBeginEditing:(UITextField *)textField
    {
        CGRect textFrame =  textField.frame;
        float textY = textFrame.origin.y+textFrame.size.height;
        float bottomY = self.view.frame.size.height-textY;
        if(bottomY>=216)  //判断当前的高度是否已经有216,如果超过了就不需要再移动主界面的View高度
        {
            prewTag = -1;
            return;
        }
        prewTag = textField.tag;
        float moveY = 216-bottomY;  
        prewMoveY = moveY;
        
        NSTimeInterval animationDuration = 0.30f;
        CGRect frame = self.view.frame;
        frame.origin.y -=moveY;//view的Y轴上移
        frame.size.height +=moveY; //View的高度增加
        self.view.frame = frame;
        [UIView beginAnimations:@"ResizeView" context:nil];
        [UIView setAnimationDuration:animationDuration];
        self.view.frame = frame;
        [UIView commitAnimations];//设置调整界面的动画效果
    }
    
    /**
     结束编辑UITextField的方法,让原来的界面还原高度
     */
    -(void) textFieldDidEndEditing:(UITextField *)textField
    {
        if(prewTag == -1) //当编辑的View不是需要移动的View
        {
            return;
        }
        float moveY ;
        NSTimeInterval animationDuration = 0.30f;
        CGRect frame = self.view.frame;
        if(prewTag == textField.tag) //当结束编辑的View的TAG是上次的就移动
        {   //还原界面
            moveY =  prewMoveY;
            frame.origin.y +=moveY;
            frame.size. height -=moveY;
            self.view.frame = frame;
        }
        //self.view移回原位置
        [UIView beginAnimations:@"ResizeView" context:nil];
        [UIView setAnimationDuration:animationDuration];
        self.view.frame = frame;
        [UIView commitAnimations];
        [textField resignFirstResponder]; 
    
    
    }
  • 相关阅读:
    [SAP ABAP开发技术总结]OLE
    [SAP ABAP开发技术总结]ABAP读写、解析XML文件
    [SAP ABAP开发技术总结]FTP到文件服务器,服务器上文件读写
    [SAP ABAP开发技术总结]Function远程、同步、异步调用
    [SAP ABAP开发技术总结]采购、销售、生产简单业务流程
    [SAP ABAP开发技术总结]IDoc
    [SAP ABAP开发技术总结]BAPI调用
    [SAP ABAP开发技术总结]业务对象和BAPI
    [SAP ABAP开发技术总结]增强Enhancement
    [SAP ABAP开发技术总结]SD销售订单定价过程
  • 原文地址:https://www.cnblogs.com/liuxp1990/p/3503221.html
Copyright © 2011-2022 走看看