iOS键盘监听以及获取键盘高度

  在文本输入时,界面会弹出键盘。有时,当文本输入框过低,被键盘遮挡,使用户无法看见输入框文本内容,这就使得用户体验过低。

  所以需要我们对键盘进行监控并获取键盘高度,调节界面或文本框高度进行处理。如下图,文本输入框过低的情况:

     

  像这样的情况,如若未作处理,输入框就会被键盘遮挡。这时,我们需要监听键盘事件,获取键盘高度,对文本框视图进行高度调整:

 1 #import "ViewController.h"
 2
 3 @interface ViewController ()<UITextFieldDelegate>
 4 @property (weak, nonatomic) IBOutlet UITextField *inputField;
 5 // 拖线获取的视图约束对象
 6 @property (weak, nonatomic) IBOutlet NSLayoutConstraint *toBottom;
 7
 8 @end
 9
10 @implementation ViewController
11
12 - (void)viewDidLoad {
13     [super viewDidLoad];
14
15     self.inputField.delegate = self;
16
17     // 添加通知监听见键盘弹出/退出
18     [[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(keyboardAction:) name:UIKeyboardWillShowNotification object:nil];
19     [[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(keyboardAction:) name:UIKeyboardWillHideNotification object:nil];
20 }
21
22 // 点击非TextField区域取消第一响应者
23 - (void)touchesBegan:(NSSet<UITouch *> *)touches withEvent:(UIEvent *)event{
24     [self.inputField resignFirstResponder];
25 }
26
27 // 点击键盘Return键取消第一响应者
28 - (BOOL)textFieldShouldReturn:(UITextField *)textField{
29     [self.inputField resignFirstResponder];
30     return  YES;
31 }
32
33 // 点击按钮取,消第一响应者
34 - (IBAction)okAction:(UIButton *)sender {
35     [self.inputField resignFirstResponder];
36 }
37
38 // 键盘监听事件
39 - (void)keyboardAction:(NSNotification*)sender{
40     // 通过通知对象获取键盘frame: [value CGRectValue]
41     NSDictionary *useInfo = [sender userInfo];
42     NSValue *value = [useInfo objectForKey:UIKeyboardFrameEndUserInfoKey];
43
44     // <注意>具有约束的控件通过改变约束值进行frame的改变处理
45     if([sender.name isEqualToString:UIKeyboardWillShowNotification]){
46         self.toBottom.constant = [value CGRectValue].size.height;
47     }else{
48         self.toBottom.constant = 0;
49     }
50 }
51
52 - (void)didReceiveMemoryWarning {
53     [super didReceiveMemoryWarning];
54 }
55
56 @end

  像这样处理过后,输入框视图的位置就可以随键盘的弹出/退出而做相应的调整了:

  

时间: 2024-08-01 10:42:25

iOS键盘监听以及获取键盘高度的相关文章

键盘监听,高度获取

监听 -(void)viewWillAppear:(BOOL)animated{ [super viewWillAppear:animated]; [[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(keyboarWillShow:) name:UIKeyboardWillShowNotification object:nil]; [[NSNotificationCenter defaultCente

iOS之 利用通知(NSNotificationCenter)获取键盘的高度,以及显示和隐藏键盘时修改界面的注意事项

我们在开发中会遇到这样的情况:调用键盘时需要界面有一个调整,避免键盘遮掩输入框. 但实现时你会发现,在不同的手机上键盘的高度是不同的.这里列举一下: //获取键盘的高度 /* iphone 6: 中文 2014-12-31 11:16:23.643 Demo[686:41289] 键盘高度是 258 2014-12-31 11:16:23.644 Demo[686:41289] 键盘宽度是 375 英文 2014-12-31 11:55:21.417 Demo[1102:58972] 键盘高度是

C#全局键盘监听(Hook)的使用

一.为什么需要全局键盘监听? 在某些情况下应用程序需要实现快捷键执行特定功能,例如大家熟知的QQ截图功能Ctrl+Alt+A快捷键,只要QQ程序在运行(无论是拥有焦点还是处于后台运行状态),都可以按下快捷键使用此功能... 这个时候在程序中添加键盘监听肯定不能满足需求了,当用户焦点不在App上时(如最小化,或者用户在处理其它事物等等)键盘监听就失效了 二.怎样才能实现全局键盘监听? 这里需要用到Windows API,源码如下:(可以作为一个工具类[KeyboardHook.cs]收藏起来) u

【转】【C#】全局键盘监听

using System; using System.Collections.Generic; using System.Text; using System.Runtime.InteropServices; using System.Windows.Forms; using System.Reflection; namespace 梦琪动漫屋 { /// <summary> /// 键盘钩子/// </summary> class KeyboardHook { public ev

vue使用element-ui的el-input监听不了键盘事件解决

vue使用element-ui的el-input监听不了键盘事件,原因应该是element-ui自身封装了一层div在input标签外面,把原来的事件隐藏了,所以如下代码运行是无响应的: <el-input v-model="name" placeholder="账号" @keyup.enter="doLogin"></el-input> 在执行的时候事件是定义在input外面的div上的,所有没有响应. 解决方法需要在事

使用HTML+CSS,jQuery编写的简易计算器后续(添加了键盘监听)

之前发布了一款简易的计算器,今天做了一下修改,添加了键盘监听事件,不用再用鼠标点点点啦 JS代码: var yunSuan = 0;// 运算符号,0-无运算;1-加法;2-减法;3-乘法;4-除法 var change = 0;// 属于运算符后需要清空上一数值 var num1 = 0;// 运算第一个数据 var num2 = 0;// 运算第二个数据 var cunChuValue = 0;// 存储的数值 $(function() { $(".number").click(f

JPanel添加键盘监听事件

因为在自己的游戏需求中谢了要用键盘控制飞机的移动,所以用到键盘监听事件,但是使用了JPanel之后添加了键盘监听事件,按相应的方向键飞机并没有反应.但是如果是为JFrame的内容面板加则会有反应. 为了使得能在JPanel里头使用键盘事件解决方法如下: 1.在JPanel里头添加键盘监听 this.addKeyListener(new KeyAdapter(){ public void keyPressed(KeyEvent e) { switch(e.getKeyCode()){ case K

HTML5 键盘监听原理实现的抓怪兽游戏+代码

HTML5小游戏抓怪兽,应用Canvas等超多的HTML5技巧编写而成,下面来向大家汇报实现步骤: 1.创建游戏画布: .代码   var canvas = document.createElement("canvas"); var ctx = canvas.getContext("2d"); canvas.width = 512; canvas.height = 480; document.body.appendChild(canvas); 我们需要做的第一件事是

python之键盘监听木马(SMTP信箱收取监听结果、修改注册表自启动)

最近接触了python的win32库,库子提供了不少可用于windows开发的API,这里就利用这个为原理制作一个键盘监听木马的雏形. 这里需要使用额外的模块pythonHook(放置钩子时),pythoncom 主要监听功能相关代码: #放置键盘监听钩子 def seeing(): PH=pyHook.HookManager() PH.KeyDown=KeyboardEvent PH.HookKeyboard() pythoncom.PumpMessages() #键盘事件 def Keybo