有朋友问了一些关于iPhone键盘的问题, 那么总结一下, 在 iOS 程序中当想要在文本框中输入数据,点击文本框会打开键盘。对于 iPad 程序,其键盘有一个按钮可以用来关闭键盘,但是 iPhone 程序中的键盘却没有这样的按钮,不过我们可以采取一些方法关闭它。例如,我们可以实现按下 Return [Keyboard Type为defult] (有时也是 Done、Research 等)关闭键盘,或更人性化的,轻触背景关闭键盘。

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

当按下键盘的 Return 键,会产生一个 Did End On Exit 事件,此时我们告诉文本框要放弃控件,于是键盘就消失了。在这个基础上,实现轻触 Return 关闭键盘,步骤为:

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

- (IBAction)textFiledReturnEditing:(id)sender;

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

- (IBAction)textFiledReturnEditing:(id)sender

{

[sender resignFirstResponder];

}

Snip20160511_2.png

Snip20160511_1.png

所谓 First Responder 译为第一响应者,指的就是用户当前正在与之交互的控件,。当用户使用键盘时,First Responder 就是这个键盘,resignFirstResponder 方法,顾名思义,就是放弃 First Responder 。

2、下面介绍更人性化的方法,轻触背景关闭键盘。

跟上面的步骤差不多,首先定义一个方法,然后实现这个方法,接下来将指定的控件映射到这个方法,并选择好所触发的事件。不同的是,这次我们要选择的控件不是上边的文本框,而是视图 View 本身。

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

- (IBAction)backgroundTap:(id)sender;

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

- (IBAction)backgroundTap:(id)sender

{

[self.textField resignFirstResponder];

}

需要说明的是,[self.textField resignFirstResponder]表示,如果textField有FirstResponder的话就放弃它,我们不用先判断firstField是否有,这条语句完全正确。

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

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

Snip20160511_3.png

(4)在 Connector Inspector 中找到 Touch Down ,从它右边的圆圈中拉出映射线,映射到 ViewController.h 的 backgroundTap 方法,如下图:

Snip20160511_4.png

如此, 打开键盘之后,在空白区域点击一下,键盘就会向下收起来。

在论坛上也有只写一个backgroundTap 函数,然后将组件的事件和屏幕的事件指向同一个函数。其实这两个方法都是可以用的,但是呢,我更加倾向于使用同一个函数的方法,原因就要牵扯到第二个方面的知识:

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

3 解决虚拟键盘挡住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

{

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;

//键盘高度216

int offset = frame.origin.y + 32 - (self.view.frame.size.height - 216.0);

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];

}

只要在代码中加入这三个文件,然后设置自身delegate就可以实现屏幕的移动,但是这里经常会有屏幕移动后不能返回的问题,这里的解决方案就是

- (IBAction)backgroundTap:(id)sender

{

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函数中添加这些代码,这样屏幕就会返回正常了。

uitextfield 键盘类型_UITextField 键盘弹出问题相关推荐

  1. java 弹出软键盘_Android开发之弹出软键盘工具类简单示例

    本文实例讲述了Android开发之弹出软键盘工具类.分享给大家供大家参考,具体如下: package com.maobang.imsdk.util; import android.content.Co ...

  2. android 键盘遮盖输入框_android弹出输入框,软键盘挡住部分编辑框

    公司要做一款类似微信的即时通讯app 现有如下需求: 当edittext获取到焦点,弹出输入框,并且将listview(recyclerview)顶上去 类似微信QQ的效果,如下图所示 editTex ...

  3. vant 软键盘_移动端软键盘监听(弹出,收起),及影响定位布局的问题

    移动端软键盘监听(弹出,收起),及影响定位布局的问题 一:移动端软键盘监听(弹出,收起) 1.监听resize ( Android) var winHeight = $(window).height( ...

  4. 键盘按8怎么弹出计算机,win8系统键盘太过灵敏打一个字母键出来多个字母怎么办...

    最近有win8系统用户反映说他使用的键盘太过灵敏了,轻轻敲打键盘的一个字母键,却总是弹出一长串多个字母,经常会打错字,想必有很多用户遇到过这样的问题吧,要如何处理呢,现在小编就给大家介绍一下win8系 ...

  5. ABAP程序中调用不同类型的函数弹出不同的消息对话框

    一组有用的用户交互窗口函数 显示多条消息 SAP系统用的是这个函数:C14Z_MESSAGES_SHOW_AS_POPUP POPUP_TO_CONFIRM_LOSS_OF_DATA 显示有YES/N ...

  6. 设置Android软键盘的默认不弹出

    2019独角兽企业重金招聘Python工程师标准>>> 方法一:在OnCreate()函数中,加上下面的代码 getWindow().setSoftInputMode( Window ...

  7. swift:iOS模拟器键盘设置(弹出,中文键盘,隐藏)

    1 当点击UItextField输入框时,没有弹出虚拟键盘 解决方案:取消勾选Hardware>Keyboard>Connection HardWare Keyboard选项 2 想要模拟 ...

  8. android 弹出键盘 底部控件上移,如何设置底部控件view随着软键盘的弹出而上移...

    1. 概述 在开发中,我们可能会遇到一个常见的效果,就是点击EditText输入框,软键盘随着EditText输入框同时上移,实现方式如下: 给EditText 外层添加一个 ScrollView,然 ...

  9. android 弹出对话框时显示键盘

    今天,简单讲讲如何在弹出自定义的对话框时,弹出软键盘. 之前,我讲了如何制作自定义的对话框,现在,如果在弹出对话框时,自动弹出软键盘,将光标直接聚焦到自定义对话框的输入框内,那该怎么做呢? 在网上搜索 ...

最新文章

  1. android 根据时间获取时间对应的星期
  2. 面试:你了解中兴吗_HTTP简介:您需要了解的所有内容
  3. 古塔问题matlab,基于 Matlab 对古塔变形趋势探究的数学模型
  4. Linux笔记 1-8 --文件传输
  5. 桌面鼠标手写输入法_「桌面分享」工作娱乐两不误,花费7万打造的桌面都有些啥?...
  6. 黑客必须掌握的基本技能
  7. 收藏 | 机器学习、深度学习调参手册
  8. 重要性采样(Importance Sampling)简介和简单样例实现
  9. 95-090-022-源码-bin脚本-CLI提交Job的时候加载插件
  10. element ui 图片控件 排序_vuedraggable+element ui实现页面控件拖拽排序效果
  11. 2021-2025年中国电弧火花发射光谱仪行业市场供需与战略研究报告
  12. 【报错】Error inserting GREEM=30 YELLOW=4 RED=5 android.database.sqlite.SQLiteException: no such tab
  13. 得寸进尺的摩根大通 步步为营
  14. 基于javaweb的学生考勤管理系统(java+SSM+Poi导出+Easyui+JFreeChart+maven+mysql)
  15. SAP HANA XS 专栏
  16. NLP、CV、语音相关AI算法工程师面试问题、代码、简历模板、知识点等资源整理分享
  17. 2022年金三银四该如何规划,才能轻松拿到offer
  18. 淘宝客评论粉引流玩法介绍(二)
  19. 机房布线系统施工要点解析
  20. Flutter 加载WebView(加载网页)

热门文章

  1. PIC单片机精通_串口通信模块C实现
  2. MySQL数据库中导入导出方法以及工具介绍
  3. sql语句查询过慢的原因分析
  4. Delphi的单元文件详解
  5. java-web hibernate中的懒加载问题
  6. head.s 分析——Linux-0.11 学习笔记(三)
  7. ModbusPoll及ModbusSlave安装及使用指南
  8. Shrio Unable to execute ‘doFinal‘ with cipher instance
  9. 数据结构与算法 -- 栈 ADT
  10. ANDROID: 超级好用的ADB FORWARD命令