再正式开始之前,先来介绍一下IOS的键盘类型:

一、键盘风格

UIKit框架支持8种风格键盘

1
2
3
4
5
6
7
8
9
10
typedef enum { 
    UIKeyboardTypeDefault,                // 默认键盘:支持所有字符  
    UIKeyboardTypeASCIICapable,           // 支持ASCII的默认键盘  
    UIKeyboardTypeNumbersAndPunctuation,  // 标准电话键盘,支持+*#等符号  
    UIKeyboardTypeURL,                    // URL键盘,有.com按钮;只支持URL字符  
    UIKeyboardTypeNumberPad,              //数字键盘  
    UIKeyboardTypePhonePad,               // 电话键盘  
    UIKeyboardTypeNamePhonePad,           // 电话键盘,也支持输入人名字  
    UIKeyboardTypeEmailAddress,           // 用于输入电子邮件地址的键盘  
} UIKeyboardType;

用法用例:

textView.keyboardtype = UIKeyboardTypeNumberPad;

二、键盘外观

    1. 1
      2
      3
      4
      typedef enum { 
          UIKeyboardAppearanceDefault,    // 默认外观:浅灰色  
          UIKeyboardAppearanceAlert,      //深灰/石墨色  
      } UIKeyboardAppearance;

      用法用例:

      textView.keyboardAppearance=UIKeyboardAppearanceDefault;

      三、回车键

      1. 1
        2
        3
        4
        5
        6
        7
        8
        9
        10
        11
        12
        13
        typedef enum { 
            UIReturnKeyDefault,  //默认:灰色按钮,标有Return
            UIReturnKeyGo,  //标有Go的蓝色按钮
            UIReturnKeyGoogle,  //标有Google的蓝色按钮,用于搜索
            UIReturnKeyJoin,  //标有Join的蓝色按钮
            UIReturnKeyNext,  //标有Next的蓝色按钮
            UIReturnKeyRoute,  //标有Route的蓝色按钮
            UIReturnKeySearch,  //标有Search的蓝色按钮
            UIReturnKeySend,  //标有Send的蓝色按钮
            UIReturnKeyYahoo,  //标有Yahoo!的蓝色按钮,用于搜索
            UIReturnKeyDone,  //标有Done的蓝色按钮
            UIReturnKeyEmergencyCall,  //紧急呼叫按钮
        } UIReturnKeyType;

        用法用例:

        textView.returnKeyType=UIReturnKeyGo;

        四、自动大写

        1. 1
          2
          3
          4
          5
          6
          typedef enum { 
              UITextAutocapitalizationTypeNone, //不自动大写  
              UITextAutocapitalizationTypeWords, //单词首字母大写  
              UITextAutocapitalizationTypeSentences, //句子首字母大写  
              UITextAutocapitalizationTypeAllCharacters, //所有字母大写  
          } UITextAutocapitalizationType;

          用法用例:

          textField.autocapitalizationType = UITextAutocapitalizationTypeWords;

          五、自动更正

          1. 1
            2
            3
            4
            5
            typedef enum { 
                UITextAutocorrectionTypeDefault,//默认  
                UITextAutocorrectionTypeNo,//不自动更正  
                UITextAutocorrectionTypeYes,//自动更正  
            } UITextAutocorrectionType;

            用法用例:

            textField.autocorrectionType = UITextAutocorrectionTypeYes;

            六、安全文本输入

            textView.secureTextEntry=YES;

            开启安全输入主要是用于密码或一些私人数据的输入,此时会禁用自动更正和自此缓存。

            以上内容都可以在 inspector中设置:

            在 iOS 程序中当想要在文本框中输入数据,轻触文本框会打开键盘。对于 iPad 程序,其键盘有一个按钮可以用来关闭键盘,但是 iPhone 程序中的键盘却没有这样的按钮,不过我们可以采取一些方法关闭它。例如,我们可以实现按下 Rerun (有时也是 Done、Research 等)键关闭键盘,或者,更人性化的,轻触背景关闭键盘。

            1、首先讲一下按下Return键关闭键盘。

            当按下键盘的 Return 键,会产生一个 Did End On Exit 事件,此时,我们告诉文本框要放弃控件,于是键盘就消失了。

            假设,我们已经创建了一个 Single View Application ,并打开 ViewController.xib 文件,在 View 上拖上去了三个 Text Field ,然后,我们把这三个文本框映射到 ViewController.h 中,名称依次是 firstField、secondField 以及 thirdField 。如下图:

            (1)在 ViewController.h 中声明一个方法:

            1
            - (IBAction)textFiledReturnEditing:(id)sender;

            (2)在 ViewController.m 中实现这个方法:

            1
            2
            3
            -(IBAction)textFiledReturnEditing:(id)sender {
                [sender resignFirstResponder];
            }

            让这三个文本框都映射到 textFiledReturnEditing 方法,不过此时的事件应当是 Did End On Exit ,具体操作是:

            打开 Assistant Editor ,左边打开 ViewController.xib ,右边打开 ViewController.h ,在 Xcode 最右边打开 Connector Inspector ,然后在 View 中选择第一个文本框,在 Connector Inspector 中找到 Did End On Exit ,从它右边的圆圈中拉出映射线,映射到 ViewController.h 的 textFiledReturnEditing 方法,如下图:

            给其他两个文本框进行同样的操作。现在,已经实现了轻触 Return 键关闭键盘。

            2、下面介绍轻触背景关闭键盘。

            (1)在 ViewController.h 文件中添加方法声明代码:

            1
            - (IBAction)backgroundTap:(id)sender;

            (2)在ViewController.m中实现这个方法:

            1
            2
            3
            4
            5
            - (IBAction)backgroundTap:(id)sender {
                [firstField resignFirstResponder];
                [secondField resignFirstResponder];
                [thirdField resignFirstResponder];
            }

            (3)让 View 映射到这个方法,不过事先,我们先要改变 View 的类型。

            打开xib,选中 View ,打开 Identity Inspector ,在 class 中选择 UIControl :

            4)打开Assistant Editor ,左边打开 ViewController.xib ,右边打开 ViewController.h ,在Xcode最右边打开 Connector Inspector ,在 ViewController.xib 中选择 Control ,在 Connector Inspector 中找到 Touch Down ,从它右边的圆圈中拉出映射线,映射到 ViewController.h 的 backgroundTap 方法,如下图:

            运行结果:

            打开键盘之后,在背景区域点击一下,键盘就会向下收起来。

            三.解决虚拟键盘挡住UITextField的方法

            因为屏幕太小的缘故,一个键盘跳出来总是把输入框挡住,所以需要移动屏幕来匹配键盘

            1
            2
            3
            4
            5
            6
            7
            8
            9
            10
            11
            12
            13
            14
            15
            16
            17
            18
            19
            20
            21
            22
            23
            24
            25
            26
            27
            28
            29
            30
            31
            32
            33
            34
            35
            36
            37
            38
            39
            40
            41
            42
            43
            44
            45
            46
            47
            #pragma mark -
            #pragma mark 解决虚拟键盘挡住UITextField的方法
            - (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); 
                //CGRect rect = CGRectMake(0.0f, 20.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 + 32 - (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];              
            }
            #pragma mark -

            只要在代码中加入这三个文件,然后将自身delegate

            控制器添加UITextFieldDelegate

            1
            @interface ViewController : UIViewController<uitextfielddelegate></uitextfielddelegate>

            在viewDidLoad中添加:

            1
            2
            3
            4
            5
            6
            7
            8
            9
            - (void)viewDidLoad
            {
                [super viewDidLoad];
                self.firstTextField.delegate=self;
                 
                self.secondTextField.delegate=self;
                self.thirdTextField.delegate=self;
                 
            }

            但是这里经常会有屏幕移动后不能返回的问题,这里的解决方案就是

            1
            2
            3
            4
            5
            6
            7
            8
            9
            10
            11
            - (IBAction)backgroundTap:(id)sender {
                [self.firstTextField resignFirstResponder];
                [self.secondTextField resignFirstResponder];
                [self.thirdTextField resignFirstResponder];
                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;
                 
            }

            在backgroundTap函数中添加这些代码,这样屏幕就会返回正常了。 
            运行结果:

            下载链接http://download.csdn.net/detail/superlele123/6986691

隐藏虚拟键盘,解决键盘挡住UITextField问题的更多相关文章

  1. iOS 开发之 - 关闭键盘 退出键盘 的5种方式

    iOS 开发之 - 关闭键盘 退出键盘 的5种方式   1.点击编辑区以外的地方(UIView) 2.点击编辑区域以外的地方(UIControl) 3.使用制作收起键盘的按钮 4.使用判断输入字元 5 ...

  2. 【转】iOS 上常用的两个功能:点击屏幕和return退出隐藏键盘和解决虚拟键盘挡住UITextField的方法

    iOS上面对键盘的处理很不人性化,所以这些功能都需要自己来实现, 首先是点击return和屏幕隐藏键盘 这个首先引用双子座的博客 http://my.oschina.net/plumsoft/blog ...

  3. ios7学习之路七(隐藏虚拟键盘,解决键盘挡住UITextField问题)

    再正式开始之前,先来介绍一下IOS的键盘类型: 一.键盘风格 UIKit框架支持8种风格键盘 typedef enum { UIKeyboardTypeDefault, // 默认键盘:支持所有字符 ...

  4. iOS 键盘挡住UITextField

    iOS经常使用的两个功能:点击屏幕和return隐藏虚拟键盘和解决虚拟键盘挡住UITextField的方法 iOS上面对键盘的处理非常不人性化,所以这些功能都须要自己来实现,  首先是点击return ...

  5. 在 Android 的文字编辑控件 (TEdit) 中, 如何按下 Enter 就隐藏虚拟键盘

    在 Windows 的应用中,我们常常为了让使用者能够快速输入,在Edit元件中的onKeyUp或者 onKeyDown 事件中主动侦测使用者输入的字元是否有换行符号 (Enter),当使用者按下了E ...

  6. 解决react-native软键盘弹出挡住输入框的问题

    解决react-native软键盘弹出挡住输入框的问题 写登录页面,整体界面居中之后就出现软键盘弹出挡住输入框,用户体验不好的情况.用了RN官方的KeyboardAvoidingView组件,会有多出 ...

  7. Android开发,在Fragment中,隐藏或关闭软键盘(虚拟键盘)的方法

    网上可以搜到各种方法,实际测试中,我的开发用机中,仅仅下面这个方法有效,记录一下. //隐藏虚拟键盘      public static void HideKeyboard(View v)      ...

  8. 『零行代码』解决键盘遮挡问题(iOS)

    关注仓库,及时获得更新:iOS-Source-Code-Analyze https://github.com/draveness/iOS-Source-Code-Analyze Follow: Dra ...

  9. Android虚拟、实体键盘不能同时使用?

    /****************************************************************************** * Android虚拟.实体键盘不能同时 ...

随机推荐

  1. L - Fabled Rooks(中途相遇法和贪心)

    Problem F: Fabled Rooks We would like to place n rooks, 1 ≤ n ≤ 5000, on a n×n board subject to the ...

  2. python3.x爬取美团信息

    在之前的文章中,笔者有提到,我们要在实践中去学习python,笔者有天就想着要不要爬点东西呢,跃跃欲试的节奏啊,想来想去,想到美团了,那么首先笔 者想给自己确定一个目标,就是我要爬什么样的数据,我要爬 ...

  3. Wamp,XAMPP 无法启动,端口未占用的故障处理

    打开服务管理里:Service.msc 找到服务:WinHttpAutoProxySvc(WinHTTP 实现了客户端 HTTP 堆栈并向开发人员提供 Win32 API 和 COM 自动化组件以供发 ...

  4. 13. Android框架和工具之 Android Drawable Factory

    1. AndroidDrawableFactory 一个生成Android应用所需尺寸图片的工具. 托管在Github之中: https://github.com/tizionario/Android ...

  5. 【阿里云产品公测】阿里云ECS服务器,PTS网站性能

    作者:阿里云用户321房产网 系统环境:CentOS 6.3 运行组件:Nginx + php + mysql + 缓存加速为eAccelerator 运行网站:基于phpcms开发模板:321房产网 ...

  6. leetcode题解:Search in Rotated Sorted Array(旋转排序数组查找)

    题目: Suppose a sorted array is rotated at some pivot unknown to you beforehand. (i.e., 0 1 2 4 5 6 7  ...

  7. iOS开发libWeChatSDK.a(WXApiObject.o)' does not contain bitcode.

    在使用微信分享的时候可能会报错, 报错如下: ld: '/Users/gti/Documents/********/Lib/SDKExport/libWeChatSDK.a(WXApiObject.o ...

  8. Oracle基础 exp/imp命令

    一.导出方式: 使用exp/imp方式导出数据分为四种方式: 1.表方式导出:一个或多个指定的表,包括表的定义.表数据.表的所有者授权.表索引.表约束,以及创建在该表上的触发器.也可以只导出结构,不导 ...

  9. NIS客户端限制用户登录

    公司所有账号信息由一台 NIS Server 统一管理,但是有几台 NIS Client 只允许某几个用户登录.这里通过PAM机制来实现该需求. 1. 需要配置的文件 (/etc/pam.d/目录下) ...

  10. [python] HDU自动登录提交代码程序

    调了一个下午,被python的正则绊住了:在C#上运作好好的式子在python老是报错,原来python的断言式必须是固定长度的,像类似(?<=[^>].*?)的零宽度正回顾后发断言是不允 ...