欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页  >  移动技术

键盘弹出时会覆盖文本框怎么解决

程序员文章站 2023-12-09 22:25:39
在一些网站登陆界面,我们经常会见到,键盘的出现与隐藏操作,那么基于代码是如何实现的呢?下面小编写了具体代码介绍,特此分享到萬仟网平台,供大家参考 先给大家展示下效果图:...

在一些网站登陆界面,我们经常会见到,键盘的出现与隐藏操作,那么基于代码是如何实现的呢?下面小编写了具体代码介绍,特此分享到平台,供大家参考

先给大家展示下效果图:

键盘弹出时会覆盖文本框怎么解决

键盘弹出时会覆盖文本框怎么解决

键盘弹出时会覆盖文本框怎么解决

具体代码如下所示:

#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

关于键盘弹出与隐藏代码就给大家介绍到这里,希望对大家有所帮助!