键盘的出现于隐藏(解决键盘弹出时会覆盖文本框的问题,代码实现)

#import "ViewController.h"

#import "UIView+FrameExtension.h" // 可以自己写,以后用着方便

#define kDeviceHeight [UIScreen mainScreen].bounds.size.height

@interface ViewController ()

@end

@implementation ViewController

- (void)viewDidLoad {

[super viewDidLoad];

// 设置视图的背景色

self.view.backgroundColor = [UIColor lightGrayColor];

// 添加第一个文本框 假定位置

UITextField *firstField = [[UITextField alloc]initWithFrame:CGRectMake(50, 300, 200, 40)];

firstField.backgroundColor = [UIColor whiteColor];

[self.view addSubview:firstField];

// 添加第一个文本框

UITextField *secondField = [[UITextField alloc]initWithFrame:CGRectMake(firstField.x, firstField.bottom + 50, firstField.width , firstField.height)];

[self.view addSubview:secondField];

secondField.backgroundColor = [UIColor whiteColor];

// 注册键盘显示的通知

[[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(showKeyboard:) name:UIKeyboardWillShowNotification object:nil];

// 注册键盘隐藏的通知

[[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(hideKeyboard: ) name:UIKeyboardWillHideNotification object:nil];

}

// 键盘弹出时执行这个方法,

-(void)showKeyboard:(NSNotification *)notification{

// 定义一个文本框,指向正在编辑的文本框,也就是弹出键盘的文本框

UITextField *txtField;

// 今次遍历当前视图的所有子视图, subViews数组保存的是当前视图所有的子视图

for (UIView *subView in self.view.subviews) {

// 如果这个子视图是一个文本框的话,isKindOfClass方法可以判断某个变量是不是某个类型的变量

if ([subView isKindOfClass:[UITextField class]]) {

// 先把这个子视图转化为文本框

UITextField *tempField = (UITextField *)subView;

// 再判断这个文本框是不是正在编辑

if (tempField.isEditing ) {

// 如果这个文本框正在编辑,就是我要找的文本框,中断循环

txtField = tempField;

break;

}

}

}

NSLog(@"%@", notification);

// 获取通知的userInfo属性

NSDictionary *userInfoDict = notification.userInfo;

// 通过键盘通知的userInfo属性获取键盘的bounds

NSValue *value = [userInfoDict objectForKey:UIKeyboardBoundsUserInfoKey];

// 键盘的大小

CGSize keyboardSize = [value CGRectValue].size;

// 键盘高度

CGFloat keyboardHeight = keyboardSize.height;

CGFloat offset = kDeviceHeight - keyboardHeight - txtField.bottom ;

if (offset < 0 ) {      //这种情况下需要上移

offset = offset - 10 ;     //保存上移的高度

[UIView animateWithDuration:0.5 animations:^{

self.view.transform = CGAffineTransformMakeTranslation(0, offset );

}];

}

}

-(void)hideKeyboard:(NSNotification *)notification{

[UIView animateWithDuration:2 animations:^{

self.view.transform = CGAffineTransformIdentity;

}];

}

// 点击屏幕空白时隐藏键盘

-(void)touchesBegan:(NSSet<UITouch *> *)touches withEvent:(UIEvent *)event{

[self.view endEditing:YES];

}

@end

源文件可以在这里下载,希望可以帮到你:http://pan.baidu.com/s/1pLms9zP

时间: 2025-01-02 15:48:14

键盘的出现于隐藏(解决键盘弹出时会覆盖文本框的问题,代码实现)的相关文章

Android输入法弹出时覆盖输入框问题

本文来自网易云社区 作者:孙有军 当一个activity中含有输入框时,我们点击输入框,会弹出输入法界面,整个界面的变化效果与manifest中对应设置的android:windowSoftInputMode属性有关,一般可以设置的值如下, <activity android:windowSoftInputMode=["stateUnspecified","stateUnchanged",  "stateHidden", "sta

学习制作iOS程序第三天:创建全局变量,预编译函数等、优化TabBarController、加入Bugly崩溃日志、解决键盘覆盖文本框的问题

十一:创建Define定义文件和pch预处理文件 1.在Define目录里创建Const.h文件,用于保存一些常用的宏命令 #define CURRENT_APPID @"" #define IS_IPAD (UI_USER_INTERFACE_IDIOM() == UIUserInterfaceIdiomPad) #define IS_IPHONE (UI_USER_INTERFACE_IDIOM() == UIUserInterfaceIdiomPhone) #define IS_

Android软键盘弹出,覆盖h5页面输入框问题

之前我们在使用vue进行 h5 表单录入的过程中,遇到了Android软键盘弹出,覆盖 h5页面 输入框 问题,在此进行回顾并分享给大家: 系统:Android 条件:当输入框在可视区底部或者偏下的位置 触发条件:输入框获取焦点,弹出软键盘 表现:软键盘 覆盖 h5页面中的输入框 问题分析: 1.发现问题:当前页面中box为flex布局,内容为上下固定高,中间自适应(中间区域内容过多会出现滚动条,input框在wrapper的底部),input获取焦点,手机键盘弹出,input未上移到可视区内,

点击删除时弹出是否删除提示框

点击删除时弹出是否删除提示框:在通常情况下,想要点击删除某一项的时候,一般会弹出一个框,以提示操作者是否真的要删除此项,这样可以免于出现误操作,比较人性化的一个举措,下面就简单介绍一下如何实现此效果.实例代码: <!DOCTYPE html> <html> <head> <meta charset="utf-8"> <meta name="author" content="http://www.soft

弹出层覆盖整个页面方法

弹出层透明背景加框的常用样式和结构 .alertMessageBg{ position:fixed; _position:absolute; width:100%; height:100%; left:0; top:0; background:#000; opacity:0.5; -moz-opacity:0.5; filter:alpha(opacity=50); z-index:97; display:none;}.alertMessageDivBorder{ position:fixed;

php网页,想弹出对话框, 消息框 简单代码

php网页,想弹出对话框, 消息框 简单代码 <?php echo "<script language=\"JavaScript\">alert(\"OK\");history.back();</script>"; ?> 或者 <?php echo "<script language=\"JavaScript\">\r\n"; echo " a

Android学习—解决界面弹出输入框时Tabhost上移的问题

在一个Tabhost页签界面,里面有多个EditText可以输入,但是每次文本框获得焦点弹出系统键盘时,位于底部的Tab被顶到中间去了,而且还会导致输入无效: 对于这种问题,可以通过下面的设置解决: 修改AndroidManifest.xml文件,在Tabhost所在的Activity中加入:android:windowSoftInputMode="adjustPan|stateVisible" 如下: <activity android:name="com.yag.U

解决模拟弹出框情况下文档滚动的问题

用div元素来模拟弹出框很普遍,它可以自行定制各式各样的弹出框.弹出框一般用的是fixed绝对定位,也就是相对于浏览器窗口定位. 在文档高度大于窗口高度的情况下,弹出框会存在一个问题.当弹出框在显示的时候,滚动鼠标(PC端)或滑动页面(移动端)会导致文档滚动.还有在弹出框的高度也大于窗口高度时,滚动鼠标或滑动页面会先滚动弹出框,直到滚动条到头或到尾时,继续滚动弹出框仍然会导致文档的滚动. 这个问题会导致用户在隐藏弹出框返回时,页面显示不是显示弹出框前的位置.解决办法是给这个文档动态设置overf

解决artDialog弹出artDialog的问题

2015年5月8日 天气雨转晴 由于功能的需要,要实现artDialog弹出artDialog的功能,在网上搜索了很多相关的资料,但是都没有找到解决的方法.后来经过对比他人的代码得以发现问题的所在. 错误的写法: <%@ include file="/WEB-INF/layouts/include/taglibs.jsp"%> <%@ include file="/WEB-INF/layouts/include/head.jsp"%> <