键盘弹出后输入框上移的解决方案
来源:互联网 发布:淘宝刷手违法吗 编辑:程序博客网 时间:2024/06/03 17:41
键盘弹出后遮挡了textField是一种非常常见的情况,解决方案有很多种,我在这里介绍其中一种方式。
这种方式能够解决键盘弹出之后键盘高度发生变化(例如中文键盘,输入字母之后最上面会多出一块候选单词的区域),textField或view的位置变化。
首先对controller添加消息监听。
[[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(keyboardDidShow:) name:UIKeyboardDidShowNotification object:nil]; [[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(keyboardWillHide:) name:UIKeyboardWillHideNotification object:nil];
notification的name是系统预设的值。该值常用的有以下四种:
UIKIT_EXTERN NSString *const UIKeyboardWillShowNotification;UIKIT_EXTERN NSString *const UIKeyboardDidShowNotification; UIKIT_EXTERN NSString *const UIKeyboardWillHideNotification; UIKIT_EXTERN NSString *const UIKeyboardDidHideNotification;
分别代表了键盘将要显示,显示完成,将要隐藏,隐藏完成的四个状态。
根据需要选择你要处理的状态,但如果对UIKeyboardWillShowNotification添加监听,在处理view位置变化的时候可能会因为系统自带的键盘动画导致失效。
接下来是消息的处理:
#pragma mark - Notification- (void)keyboardDidShow:(NSNotification *)noti{ NSDictionary *info = [noti userInfo]; NSValue *aValue = [info objectForKey:UIKeyboardFrameEndUserInfoKey]; CGSize keyBoardSize = [aValue CGRectValue].size; CGRect rect = _bottomBarV.frame; rect.origin.y = self.view.frame.size.height - keyBoardSize.height - rect.size.height; _bottomBarV.frame = rect;}- (void)keyboardWillHide:(NSNotification *)noti{ CGRect rect = _bottomBarV.frame; rect.origin.y = self.view.frame.size.height - rect.size.height; _bottomBarV.frame = rect;}
首先,这段代码需要你根据需要自己做一些调整。我贴出来的这段代码适用的场景是一个位于屏幕最下方的view(_bottemBarV)当键盘弹起时,位移到键盘最上方。
其次,在show消息处理中,取到了一个key值为UIKeyboardFrameEndUserInfoKey。
该值为系统预设:
UIKIT_EXTERN NSString *const UIKeyboardFrameBeginUserInfoKey NS_AVAILABLE_IOS(3_2); // NSValue of CGRectUIKIT_EXTERN NSString *const UIKeyboardFrameEndUserInfoKey NS_AVAILABLE_IOS(3_2); // NSValue of CGRectUIKIT_EXTERN NSString *const UIKeyboardAnimationDurationUserInfoKey NS_AVAILABLE_IOS(3_0); // NSNumber of doubleUIKIT_EXTERN NSString *const UIKeyboardAnimationCurveUserInfoKey NS_AVAILABLE_IOS(3_0); // NSNumber of NSUInteger (UIViewAnimationCurve)
UIKeyboardFrameBeginUserInfoKey和UIKeyboardFrameEndUserInfoKey描述的是两种不同的状态,键盘大小要发生变化时,Begin代表的是变化之前的状态,End代表的是变化之后的状态,所以这个地方小心不要弄混。
这个场景中,我们希望的是键盘高度变化之后,view相应的做出变化,因此取的是End状态。
代码中的keyBoardSize即代表了键盘的宽,高。然后你就可以根据键盘的大小,改变你想改变的view位置了。
0 0
- 键盘弹出后输入框上移的解决方案
- 弹出键盘 输入框上移
- iOS简单的键盘弹出输入框上移
- 输入框弹出键盘时自动上移
- 输入框键盘弹出视图相应上移
- IOS 键盘弹出遮挡输入框使view上移
- iOS UITextField输入框随键盘弹出界面上移
- 弹出键盘后让页面上移
- iOS TextField 弹出键盘时实现view整体上移下移:防止弹出键盘遮挡输入框
- UIWebView中输入框不能弹出键盘的解决方案
- 键盘和输入框上移
- Cordova iOS 应用在第三方输入法的键盘弹出(点击输入框)时,页面不上移,导致输入框被键盘遮挡 的解决办法
- 输入框随着键盘上移,键盘回收
- 键盘的弹出引起的页面上移
- TextField随着键盘的弹出上移
- 上移键盘的时候不遮盖输入框
- 输入框弹出的时候内容上移动
- 弹出键盘上移tableView
- Android 之 ListView 点击响应代码?
- UITableView常见属性汇总
- 自己搭建struts2+spring+hibernate+c3p0数据库连接池过程
- ubuntu下 使用AB做压力测试
- 12306登陆接口更改后的随机参数的获取
- 键盘弹出后输入框上移的解决方案
- 红黑树RB-tree
- 颜色知识学习
- java awt 实现简单的验证码图片的生成
- 关于仙童八叛徒(转)
- Graph: Single Source Shortest Path(TODO)
- 自定义状态栏背景(status bar)
- 跨平台移动开发phonegap/cordova 4 ios 开发环境搭建
- cocos2dx android横屏竖屏设置