键盘弹出时会覆盖文本框怎么解决
程序员文章站
2023-11-23 21:46:34
在一些网站登陆界面,我们经常会见到,键盘的出现与隐藏操作,那么基于代码是如何实现的呢?下面小编写了具体代码介绍,特此分享到萬仟网平台,供大家参考
先给大家展示下效果图:...
在一些网站登陆界面,我们经常会见到,键盘的出现与隐藏操作,那么基于代码是如何实现的呢?下面小编写了具体代码介绍,特此分享到平台,供大家参考
先给大家展示下效果图:
具体代码如下所示:
#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
关于键盘弹出与隐藏代码就给大家介绍到这里,希望对大家有所帮助!