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

一、键盘风格

UIKit框架支持8种风格键盘

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

用法用例:

textView.keyboardtype = UIKeyboardTypeNumberPad;

二、键盘外观

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

用法用例:

textView.keyboardAppearance=UIKeyboardAppearanceDefault;

三、回车键

  1. typedef enum {  UIReturnKeyDefault,  //默认:灰色按钮,标有ReturnUIReturnKeyGo,  //标有Go的蓝色按钮UIReturnKeyGoogle,  //标有Google的蓝色按钮,用于搜索UIReturnKeyJoin,  //标有Join的蓝色按钮UIReturnKeyNext,  //标有Next的蓝色按钮UIReturnKeyRoute,  //标有Route的蓝色按钮UIReturnKeySearch,  //标有Search的蓝色按钮UIReturnKeySend,  //标有Send的蓝色按钮UIReturnKeyYahoo,  //标有Yahoo!的蓝色按钮,用于搜索UIReturnKeyDone,  //标有Done的蓝色按钮UIReturnKeyEmergencyCall,  //紧急呼叫按钮
    } UIReturnKeyType;  

用法用例:

textView.returnKeyType=UIReturnKeyGo;

四、自动大写

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

用法用例:

textField.autocapitalizationType = UITextAutocapitalizationTypeWords;

五、自动更正

  1. 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 中声明一个方法:

- (IBAction)textFiledReturnEditing:(id)sender;

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

-(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 文件中添加方法声明代码:

- (IBAction)backgroundTap:(id)sender;

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

- (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的方法

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

#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);//键盘高度216NSTimeInterval 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

@interface ViewController : UIViewController<UITextFieldDelegate>

在viewDidLoad中添加:

- (void)viewDidLoad
{[super viewDidLoad];self.firstTextField.delegate=self;self.secondTextField.delegate=self;self.thirdTextField.delegate=self;}
但是这里经常会有屏幕移动后不能返回的问题,这里的解决方案就是
- (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

转载于:https://www.cnblogs.com/lixingle/p/3707703.html

ios7学习之路七(隐藏虚拟键盘,解决键盘挡住UITextField问题)相关推荐

  1. ios7学习之路六(隐藏状态栏 )

    方法一(代码设置): 现在ios7已经更改为透明,并且不占用屏幕高度.其中隐藏及显示的方法如下: 在uiviewcontroller的子类下,调用: if ([self respondsToSelec ...

  2. Python学习之路和隐藏特征

    欢迎关注微信公众号生信宝典:http://mp.weixin.qq.com/s/vDAHTitasAUphWsrS2Uzlg 针对生信领域的零基础爱好者及生信分析中遇到的种种问题,生信领域知名公众号& ...

  3. 【python3的学习之路七】函数

    返回多个值 import mathdef move(x, y, step, angle=0):nx = x + step * math.cos(angle)ny = y - step * math.s ...

  4. Java学习之路(七):泛型

    泛型的概述和基本使用 作用:把类型明确的工作推前到创建对象或者调用方法的时候 泛型是一种参数化类型,把类型当做参数一样传递来明确集合的元素类型 泛型的好处 提高安全性 省去强转的麻烦 泛型的基本使用 ...

  5. IOS学习之路七(使用 Operation 异步运行任务)

    在 application delegate 头文件(.h)中声明一个 operation 队列和两个 invocation operations: #import <UIKit/UIKit.h ...

  6. HBase学习之路(七):理解计数器的基本概念及计数器的使用

    内容简介 一.计数器的基本概念 二.在Shell中创建并操作计数器 三.单计数器 四.多计数器 五.总结 一.计数器的基本概念 我在前两篇文章中详细介绍了HBase的过滤器,这是HBase的高级特性之 ...

  7. IOS 关闭键盘 退出键盘 的5种方式

    1.点击编辑区以外的地方(UIView) 2.点击编辑区域以外的地方(UIControl) 3.使用制作收起键盘的按钮 4.使用判断输入字元 5.关于键盘遮蔽的问题 1,点击编辑区以外的地方(UIVi ...

  8. [EntLib]微软企业库5.0 学习之路——第七步、Cryptographer加密模块简单分析、自定义加密接口及使用—上篇...

    在完成了后,今天开始介绍企业库中的新模块:Cryptographer(加密模块),这个模块在日常的大多数项目的作用非常重要,例如:网站会员密码.身份证号.网站配置等,通过对信息进行加密可以保证项目数据 ...

  9. C/C++学习之路_七: 内存管理

    C/C++学习之路_七: 内存管理 目录 作用域 内存布局 内存分区代码分析 1. 作用域 C语言变量的作用域分为: 代码块作用域(代码块是{}之间的一段代码) 函数作用域 文件作用域 1. 局部变量 ...

  10. Android常见公有方法(隐藏虚拟按键/隐藏软键盘/获取屏幕宽高等)

    隐藏虚拟按键,并且全屏 使用: ScreenUtils.hideBottomUIMenu(getWindow().getDecorView()); /*** 隐藏虚拟按键,并且全屏*/public s ...

最新文章

  1. Python---Pickle模块
  2. 一个“alert” 引发的血案
  3. 你,下周可否“报上有名”?
  4. 开发者在行动!中国防疫开源项目登上 GitHub TOP 榜
  5. matlab dpsk,2DPSK调制与解调matlab(最新整理)
  6. mysql 5.6.20 优化_mysql 5.6.20 占用内存超大,大概400M左右
  7. int在c语言中的作用,C语言中int,Uint,uint16等有什么区别以及用处
  8. linux下救援模式
  9. python保存不了_新手,我的python保存不了文件
  10. 基于51单片机的金沙滩12864的计算器
  11. 1. stm32h7 移植RTX5(AC6) 基于CUBEMX
  12. 高防ip是如何防御攻击的?
  13. java动效_前端实现炫酷动效_Lottie-前端实现AE动效
  14. 从单机到多机:多机一定比单机快吗?秒杀系统到底有没有必要用分布式锁?
  15. Linux ln -sfn命令
  16. spring3+hibernate4配置连接池C3P0
  17. 别具一格,原创唯美浪漫情人节表白专辑,(复制就可用)(html5,css3,svg)表白爱心代码(1)
  18. UITextField改变return键显示的字
  19. 小程序影藏溢出的gif_分享几个优质开源项目 | 电商类app,趣享 gif,研发助手DoraemonKit,github小程序...
  20. PHP_PDO预处理

热门文章

  1. leetcode @python 123. Best Time to Buy and Sell Stock III
  2. 第五篇:白话tornado源码之褪去模板的外衣
  3. centos 6 编译emacs-24.5
  4. 美国专家声讨物联网安全 面对攻击如纸糊
  5. ES6的一个基础类,支持私有属性和方法,支持event和mix
  6. mybaits 学习
  7. HCNP学习笔记之OSPF协议原理及配置9-基础知识特殊区域
  8. 详解FSMO的五种角色
  9. [转]在C#中使用MSHTML的高级支持接口
  10. 2.支付平台架构:业务、规划、设计与实现 --- 收银台系统