【转】IOS 输入框被键盘遮盖的解决方法

做IOS开发时,难免会遇到输入框被键盘遮掩的问题。上网上搜索了很多相关的解决方案,看了很多,但是由衷的觉得太麻烦了。

有的解决方案是将视图上的所有的东西都添加到一个滚动视图对象( UIScrollView )中,然后滚动视图实现输入框不被软键盘覆盖,个人觉得此方案好是好,但是太过麻烦。

有的解决方案是通过一个通知 UIKeyboardDidShowNotification去实现的,需要用到事件监听,而且需要自己定义并实现“将要开始编辑”与“结束编辑”这两个监听事件中的方法。本人也觉得很麻烦。

参考了很多方法,都不是太理想。自己研究了一下,既然软键盘(Keyboard)出现与否是跟输入框(UITextField)紧密关联的。所以自己找到一个解决方案,没有上述两种方案那么麻烦,只需实现代理UITextFieldDelegate中的三个方法即可。

实现方法:

1)将输入框的代理设置为self

(在lb文件中将输入框的delegate设置为File’s Owner 。或者使用代码textField.delegate = self;

2)将输入框所对应的ViewController.h设置实现了UITextFieldDelegate协议

在ViewController.m文件中实现UITextFieldDelegate的三个方法即可:

[cpp] view plaincopy

  1. //开始编辑输入框的时候,软键盘出现,执行此事件
  2. -(void)textFieldDidBeginEditing:(UITextField *)textField
  3. {
  4. CGRect frame = textField.frame;
  5. int offset = frame.origin.y + 32 - (self.view.frame.size.height - 216.0);//键盘高度216
  6. NSTimeInterval animationDuration = 0.30f;
  7. [UIView beginAnimations:@"ResizeForKeyboard" context:nil];
  8. [UIView setAnimationDuration:animationDuration];
  9. //将视图的Y坐标向上移动offset个单位,以使下面腾出地方用于软键盘的显示
  10. if(offset > 0)
  11. self.view.frame = CGRectMake(0.0f, -offset, self.view.frame.size.width, self.view.frame.size.height);
  12. [UIView commitAnimations];
  13. }
  14. //当用户按下return键或者按回车键,keyboard消失
  15. -(BOOL)textFieldShouldReturn:(UITextField *)textField
  16. {
  17. [textField resignFirstResponder];
  18. return YES;
  19. }
  20. //输入框编辑完成以后,将视图恢复到原始状态
  21. -(void)textFieldDidEndEditing:(UITextField *)textField
  22. {
  23. self.view.frame =CGRectMake(0, 0, self.view.frame.size.width, self.view.frame.size.height);
  24. }

[cpp] view plaincopy

  1. //开始编辑输入框的时候,软键盘出现,执行此事件
  2. -(void)textFieldDidBeginEditing:(UITextField *)textField
  3. {
  4. CGRect frame = textField.frame;
  5. int offset = frame.origin.y + 32 - (self.view.frame.size.height - 216.0);//键盘高度216
  6. NSTimeInterval animationDuration = 0.30f;
  7. [UIView beginAnimations:@"ResizeForKeyboard" context:nil];
  8. [UIView setAnimationDuration:animationDuration];
  9. //将视图的Y坐标向上移动offset个单位,以使下面腾出地方用于软键盘的显示
  10. if(offset > 0)
  11. self.view.frame = CGRectMake(0.0f, -offset, self.view.frame.size.width, self.view.frame.size.height);
  12. [UIView commitAnimations];
  13. }
  14. //当用户按下return键或者按回车键,keyboard消失
  15. -(BOOL)textFieldShouldReturn:(UITextField *)textField
  16. {
  17. [textField resignFirstResponder];
  18. return YES;
  19. }
  20. //输入框编辑完成以后,将视图恢复到原始状态
  21. -(void)textFieldDidEndEditing:(UITextField *)textField
  22. {
  23. self.view.frame =CGRectMake(0, 0, self.view.frame.size.width, self.view.frame.size.height);
  24. }

方法很简单吧?请注意一定不要忘记设置输入框的代理delegate哦

实现效果如下图所示:

【转】IOS 输入框被键盘遮盖的解决方法

时间: 2024-10-05 04:27:28

【转】IOS 输入框被键盘遮盖的解决方法的相关文章

ios输入框被键盘挡住的解决办法

做IOS开发时,难免会遇到输入框被键盘遮掩的问题.上网上搜索了很多相关的解决方案,看了很多,但是由衷的觉得太麻烦了. 有的解决方案是将视图上的所有的东西都添加到一个滚动视图对象( UIScrollView )中,然后滚动视图实现输入框不被软键盘覆盖,个人觉得此方案好是好,但是太过麻烦. 有的解决方案是通过一个通知 UIKeyboardDidShowNotification 去实现的,需要用到事件监听,而且需要自己定义并实现"将要开始编辑"与"结束编辑"这两个监听事件

IOS开发隐藏键盘的4种方法

IOS开发隐藏键盘的4种方法 开发的app中常会用到键盘输入完成后隐藏键盘的情况.在此总结了4种方法来实现我们的目的. 方法一--delegate方式 第一种隐藏键盘的方法,称为delegate三步法: 1. 遵循(委托/代理); 2. 调用; 3. 关联头文件(ViewController.h)中遵循代理 . 代码如下: #import <UIKit/UIKit.h> @interface ViewController : UIViewController<UITextFieldDel

IOS 隐藏软键盘的3种方法

IOS开发里软键盘是经常需要打交道的地方,下面为大家带来我整理总结的3种隐藏键盘的方法. 使用软键盘的 Done 键隐藏键盘 出发软键盘隐藏最常用的事件是文本框的 Did End on Exit,它在用户按软键盘中的 Done 键时发生.选中一个UITextField控件,点击鼠标右键弹出面板,鼠标左键按住 Did End on Exit 事件旁边的圆圈,然后拖曳到右侧 .h 文件中,命名为 CloseTheKeyBoard,在 m 文件中具体实现如下图所示(此处同时显示 .h 文件与 .m 文

[Cordova/Phonegap] Cordova iOS 应用在第三方输入法的键盘弹出(点击输入框)时,页面不上移,导致输入框被键盘遮挡 的解决办法

http://blog.csdn.net/lovelyelfpop/article/details/52033045 Cordova iOS应用在使用系统自带输入法键盘的时候,聚焦文本框是会将整体webview界面上移的,如下图: 然而,如果你用的是第三方输入法(百度.搜狗.qq输入法等都是),聚焦文本框弹出键盘时,界面却不会整体上移,导致文本框被软键盘遮挡,如下图: 不仅被遮挡,靠底部的文本框还无法往上拖拽滚至可视区域. 解决办法一:第三方键盘弹出,实现界面也能上移 使用 ionic-plug

(转载)ios关闭虚拟键盘的几种方法

在iOS应用开发中,有三类视图对象会打开虚拟键盘,进行输入操作,但如何关闭虚拟键盘,却没有提供自动化的方法.这个需要我们自己去实现.这三类视图对象分别是UITextField,UITextView和UISearchBar.这里介绍一下UITextField中关闭虚拟键盘的几种方法. (miki西游 @mikixiyou 原文链接: http://mikixiyou.iteye.com/blog/1753330 ) 第一种方法,使用它的委托UITextFieldDelegate中的方法textFi

iOS开发---- 开发错误汇总及解决方法

本文转载至 http://blog.csdn.net/shenjx1225/article/details/8561695 一.今天调试程序的时候,出现了一个崩溃,信息如下: 2013-02-01 09:05:23.929 SD4iPhone[627:c07] *** Terminating app due to uncaught exception 'NSInternalInconsistencyException', reason: 'Invalid update: invalid numb

ionic 项目引用 Background Mode 时,部署到ios设备时出现异常的解决方法

我们的ionic程序,有时候需要运行在后台,这个时候我们需要引用到cordova-plugin-background-mode,目前的版本0.7.2.  但是目前在IOS设备上调用这个版本的plugin是有问题的. 这个问题目前有以下2种解决方法. 1.  Visual Studio Code 打开ionic 项目, 打开终端, 运行命令: ionic cordova platform add ios ,  命令运行完成后, 用XCode打开位于 \platforms\ios\*.xcodepr

Ubuntu VNC 打开spyder无法输入(检测不到键盘配置)解决方法

在ubuntu中安装好spyder后, 打开spyder发现无法输入. 在打开spyder的终端窗口,有如下提示: QXcbConnection: Failed to initialize XRandr Qt: XKEYBOARD extension not present on the X server. Qt: Could not determine keyboard configuration data from X server, will use hard-coded keymap c

iOS 使用自定义手势屏蔽按钮解决方法/UITapGestureRecognizer屏蔽Button

有时候需要在scrollview上面添加手势,让其获取点击后,收起键盘,就用到添加手势.可是会出现一些后续问题,比如会拦截scrollview上面的其他一切可点击的控件,你可能会去设置手势控件的一些属性.但仅仅设置 UIGestureRecognizer 的属性是不够的,比如 : screenTouch.numberOfTapsRequired =1; [screenTouchsetCancelsTouchesInView:NO]; 这种有时候会拦截UITextField上面的清空text的按钮