关于ios键盘遮挡输入框
2012-09-03 23:12
519 查看
今天我来讲一下键盘遮挡输入框时的解决方法。我做的一个界面是这样的
我的输入框是在最下面,如果不做相关的操作的话,当编辑UITextField的时候,弹出键盘就会挡着输入框,那怎么解决这个问题呢,我们可以考虑让输入框随键盘一起向上移动,当关闭键盘时让输入框也一起向下移动回到原来的位置,这样就可以解决键盘挡着输入框的问题啦
下面看具体的代码实现:
在ios5.0之前呢键盘高度固定是216像素高,而ios5.0之后包括ios5.0键盘的高度再不是固定的,当由英文切换在中文输入时,键盘由原来的216变成了252
先说ios5.0之前的解决办法吧,我是通过UITextField的委托方法-(void)textFieldDidBeginEditing:(UITextField *)textField和另一个关掉键盘的方法
- (BOOL)textFieldShouldReturn:(UITextField *)textField来实现的,点击键盘上的Return会关掉键盘的
对了在添加-(void)textFieldDidBeginEditing:(UITextField *)textField方法前要声明并设置delegate
另一个方法是针对ios5.0之后键盘高度随输入法不同变化时的解决办法,同时也适用于ios5.0之前
在-(void)viewDidLoad方法里面添加通知
至于如何获取IOS系统版本号通过如下可获取
添加一个方法-(void)keyboardWillShow:(NSNotification *)notification具体如下
这个是编辑输入框时的效果
这个是键盘切换成中文输入法时的效果
我的输入框是在最下面,如果不做相关的操作的话,当编辑UITextField的时候,弹出键盘就会挡着输入框,那怎么解决这个问题呢,我们可以考虑让输入框随键盘一起向上移动,当关闭键盘时让输入框也一起向下移动回到原来的位置,这样就可以解决键盘挡着输入框的问题啦
下面看具体的代码实现:
在ios5.0之前呢键盘高度固定是216像素高,而ios5.0之后包括ios5.0键盘的高度再不是固定的,当由英文切换在中文输入时,键盘由原来的216变成了252
先说ios5.0之前的解决办法吧,我是通过UITextField的委托方法-(void)textFieldDidBeginEditing:(UITextField *)textField和另一个关掉键盘的方法
- (BOOL)textFieldShouldReturn:(UITextField *)textField来实现的,点击键盘上的Return会关掉键盘的
- (void)textFieldDidBeginEditing:(UITextField *)textField { CGRect frame = textField.frame; int offset = frame.origin.y +422 - (self.view.frame.size.height - 240);//键盘高度216 NSLog(@"offset is %d",offset); NSTimeInterval animationDuration = 0.30f; [UIView beginAnimations:@"ResizeForKeyBoard" context:nil]; [UIView setAnimationDuration:animationDuration]; float width = self.view.frame.size.width; float height = self.view.frame.size.height; if(offset > 0) { CGRect rect = CGRectMake(0.0f, -offset,width,height); self.view.frame = rect; } [UIView commitAnimations]; }
- (BOOL)textFieldShouldReturn:(UITextField *)textField { NSTimeInterval animationDuration = 0.30f; [UIView beginAnimations:@"ResizeForKeyboard" context:nil]; [UIView setAnimationDuration:animationDuration]; CGRect rect = CGRectMake(0.0f, 0.0f, self.view.frame.size.width, self.view.frame.size.height); self.view.frame = rect; [UIView commitAnimations]; [textField resignFirstResponder]; return YES; }
对了在添加-(void)textFieldDidBeginEditing:(UITextField *)textField方法前要声明并设置delegate
另一个方法是针对ios5.0之后键盘高度随输入法不同变化时的解决办法,同时也适用于ios5.0之前
在-(void)viewDidLoad方法里面添加通知
if(IOS_VERSION<5.0) { [[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(keyboardWillShow:) name:UIKeyboardWillShowNotification object:nil]; [[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(keyboardWillShow:) name:UIKeyboardWillHideNotification object:nil]; }else{ [[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(keyboardWillShow:) name:UIKeyboardWillShowNotification object:nil]; }
至于如何获取IOS系统版本号通过如下可获取
#define IOS_VERSION [[[UIDevice currentDevice] systemVersion] floatValue]
添加一个方法-(void)keyboardWillShow:(NSNotification *)notification具体如下
-(void)keyboardWillShow:(NSNotification *)notification { #if __IPHONE_OS_VERSION_MAX_ALLOWED >= __IPHONE_3_2 if (UI_USER_INTERFACE_IDIOM() == UIUserInterfaceIdiomPhone) { #endif #if __IPHONE_OS_VERSION_MIN_REQUIRED >= __IPHONE_3_2 NSValue *keyboardBoundsValue = [[notification userInfo] objectForKey:UIKeyboardFrameEndUserInfoKey]; #else NSValue *keyboardBoundsValue = [[notification userInfo] objectForKey:UIKeyboardBoundsUserInfoKey]; #endif CGRect keyboardBounds; [keyboardBoundsValue getValue:&keyboardBounds]; NSInteger offset =self.view.frame.size.height-keyboardBounds.origin.y+64.0; CGRect listFrame = CGRectMake(0, -offset, self.view.frame.size.width,self.view.frame.size.height); NSLog(@"offset is %d",offset); [UIView beginAnimations:@"anim" context:NULL]; [UIView setAnimationCurve:UIViewAnimationCurveEaseInOut]; [UIView setAnimationBeginsFromCurrentState:YES]; [UIView setAnimationDuration:0.3]; //处理移动事件,将各视图设置最终要达到的状态 self.view.frame=listFrame; [UIView commitAnimations]; } }
这个是编辑输入框时的效果
这个是键盘切换成中文输入法时的效果
相关文章推荐
- 关于ios键盘遮挡输入框
- 关于ios键盘遮挡输入框
- IOS学习笔记36—解决键盘遮挡输入框(UITextField)问题
- iOS——获得键盘的高度 NSNotificationCenter 避免遮挡输入框
- ios键盘弹起不遮挡输入框
- [IOS]列表选择以及键盘遮挡输入框问题
- 关于android输入框被键盘遮挡的问题
- 解决iOS键盘弹出遮挡输入框问题
- 在ios中避免键盘遮挡了输入框的处理
- iOS TextFiled、TextView 关于键盘的收起以及处理键盘遮挡
- [Cordova/Phonegap] Cordova iOS 应用在第三方输入法的键盘弹出(点击输入框)时,页面不上移,导致输入框被键盘遮挡 的解决办法
- ios开发时,键盘遮挡输入框解决方法
- iOS个人整理07-UITextView与键盘回收与键盘遮挡输入框
- IOS开发Swift语言键盘遮挡输入框(UITextField)
- ios键盘不遮挡输入框
- iOS键盘弹出遮挡输入框问题
- ios关于键盘遮挡的简单方法
- iOS键盘遮挡输入框,输入区域自动上移
- iOS解决键盘弹出遮挡输入框问题
- iOS输入框自适应键盘高度,避免遮挡