解决简单的键盘遮挡问题
2015-12-04 14:35
218 查看
解决简单的键盘遮挡问题,只要把你写的textfield 的controller继承于此类 或者在你的控制器里加上这些代码 就行
#import "KeyBoardBaseViewController.h"
#import "UIView+Uitls.h"
@interface KeyBoardBaseViewController () {
CGFloat _totalYOffset;
}
@end
@implementation KeyBoardBaseViewController
- (instancetype)initWithNibName:(NSString *)nibNameOrNil bundle:(NSBundle *)nibBundleOrNil
{
if (self = [super initWithNibName:nibNameOrNil bundle:nibBundleOrNil]) {
_totalYOffset = 0;
}
return self;
}
- (void)viewDidLoad {
[super viewDidLoad];
}
- (void)viewWillAppear:(BOOL)animated
{
[super viewWillAppear:animated];
}
- (void)viewDidAppear:(BOOL)animated
{
[super viewDidAppear:animated];
[[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(keyboardWillShow:) name:UIKeyboardWillShowNotification object:nil];
[[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(keyboardWillHide:) name:UIKeyboardWillHideNotification object:nil];
[[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(keyboardWillChangeFrame:) name:UIKeyboardWillChangeFrameNotification object:nil];
[[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(keyboardDidShow:) name:UIKeyboardDidShowNotification object:nil];
[[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(keyboardDidHide:) name:UIKeyboardDidHideNotification object:nil];
[[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(keyboardDidChangeFrame:) name:UIKeyboardDidChangeFrameNotification object:nil];
}
- (void)viewWillDisappear:(BOOL)animated
{
[super viewWillDisappear:animated];
[[NSNotificationCenter defaultCenter] removeObserver:self name:UIKeyboardWillShowNotification object:nil];
[[NSNotificationCenter defaultCenter] removeObserver:self name:UIKeyboardWillHideNotification object:nil];
[[NSNotificationCenter defaultCenter] removeObserver:self name:UIKeyboardWillChangeFrameNotification object:nil];
[[NSNotificationCenter defaultCenter] removeObserver:self name:UIKeyboardDidShowNotification object:nil];
[[NSNotificationCenter defaultCenter] removeObserver:self name:UIKeyboardDidHideNotification object:nil];
[[NSNotificationCenter defaultCenter] removeObserver:self name:UIKeyboardDidChangeFrameNotification object:nil];
}
- (void)keyboardWillShow:(NSNotification *)noti
{
CGFloat keyboardHeight = [noti.userInfo[UIKeyboardFrameEndUserInfoKey] CGRectValue].size.height;;
[self.view.layer removeAllAnimations];
UIWindow *keyWindow = [[UIApplication sharedApplication] keyWindow];
UIView *firstResponderView = [keyWindow performSelector:@selector(findFirstResponder)];
CGRect rect = [[UIApplication sharedApplication].keyWindow convertRect:firstResponderView.frame fromView:firstResponderView.superview];
CGFloat bottom = rect.origin.y + rect.size.height;
CGFloat keyboardY = self.view.window.size.height - keyboardHeight;
if (bottom > keyboardY) {
_totalYOffset += bottom - (self.view.window.size.height - keyboardHeight);
[UIView animateWithDuration:[noti.userInfo[UIKeyboardAnimationDurationUserInfoKey] doubleValue]
delay:0
options:[noti.userInfo[UIKeyboardAnimationCurveUserInfoKey] integerValue]
animations:^{
self.view.y -= _totalYOffset;
}
completion:nil];
}
}
- (void)keyboardWillHide:(NSNotification *)noti
{
[UIView animateWithDuration:[noti.userInfo[UIKeyboardAnimationDurationUserInfoKey] doubleValue]
delay:0
options:[noti.userInfo[UIKeyboardAnimationCurveUserInfoKey] integerValue]
animations:^{
self.view.y += _totalYOffset;
}
completion:nil];
_totalYOffset = 0;
}
- (void)keyboardWillChangeFrame:(NSNotification *)noti
{
}
- (void)keyboardDidShow:(NSNotification *)noti
{
}
- (void)keyboardDidHide:(NSNotification *)noti
{
}
- (void)keyboardDidChangeFrame:(NSNotification *)noti
{
}
- (void)dealloc
{
[[NSNotificationCenter defaultCenter] removeObserver:self];
}
- (void)didReceiveMemoryWarning {
[super didReceiveMemoryWarning];
}
@end
#import "KeyBoardBaseViewController.h"
#import "UIView+Uitls.h"
@interface KeyBoardBaseViewController () {
CGFloat _totalYOffset;
}
@end
@implementation KeyBoardBaseViewController
- (instancetype)initWithNibName:(NSString *)nibNameOrNil bundle:(NSBundle *)nibBundleOrNil
{
if (self = [super initWithNibName:nibNameOrNil bundle:nibBundleOrNil]) {
_totalYOffset = 0;
}
return self;
}
- (void)viewDidLoad {
[super viewDidLoad];
}
- (void)viewWillAppear:(BOOL)animated
{
[super viewWillAppear:animated];
}
- (void)viewDidAppear:(BOOL)animated
{
[super viewDidAppear:animated];
[[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(keyboardWillShow:) name:UIKeyboardWillShowNotification object:nil];
[[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(keyboardWillHide:) name:UIKeyboardWillHideNotification object:nil];
[[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(keyboardWillChangeFrame:) name:UIKeyboardWillChangeFrameNotification object:nil];
[[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(keyboardDidShow:) name:UIKeyboardDidShowNotification object:nil];
[[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(keyboardDidHide:) name:UIKeyboardDidHideNotification object:nil];
[[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(keyboardDidChangeFrame:) name:UIKeyboardDidChangeFrameNotification object:nil];
}
- (void)viewWillDisappear:(BOOL)animated
{
[super viewWillDisappear:animated];
[[NSNotificationCenter defaultCenter] removeObserver:self name:UIKeyboardWillShowNotification object:nil];
[[NSNotificationCenter defaultCenter] removeObserver:self name:UIKeyboardWillHideNotification object:nil];
[[NSNotificationCenter defaultCenter] removeObserver:self name:UIKeyboardWillChangeFrameNotification object:nil];
[[NSNotificationCenter defaultCenter] removeObserver:self name:UIKeyboardDidShowNotification object:nil];
[[NSNotificationCenter defaultCenter] removeObserver:self name:UIKeyboardDidHideNotification object:nil];
[[NSNotificationCenter defaultCenter] removeObserver:self name:UIKeyboardDidChangeFrameNotification object:nil];
}
- (void)keyboardWillShow:(NSNotification *)noti
{
CGFloat keyboardHeight = [noti.userInfo[UIKeyboardFrameEndUserInfoKey] CGRectValue].size.height;;
[self.view.layer removeAllAnimations];
UIWindow *keyWindow = [[UIApplication sharedApplication] keyWindow];
UIView *firstResponderView = [keyWindow performSelector:@selector(findFirstResponder)];
CGRect rect = [[UIApplication sharedApplication].keyWindow convertRect:firstResponderView.frame fromView:firstResponderView.superview];
CGFloat bottom = rect.origin.y + rect.size.height;
CGFloat keyboardY = self.view.window.size.height - keyboardHeight;
if (bottom > keyboardY) {
_totalYOffset += bottom - (self.view.window.size.height - keyboardHeight);
[UIView animateWithDuration:[noti.userInfo[UIKeyboardAnimationDurationUserInfoKey] doubleValue]
delay:0
options:[noti.userInfo[UIKeyboardAnimationCurveUserInfoKey] integerValue]
animations:^{
self.view.y -= _totalYOffset;
}
completion:nil];
}
}
- (void)keyboardWillHide:(NSNotification *)noti
{
[UIView animateWithDuration:[noti.userInfo[UIKeyboardAnimationDurationUserInfoKey] doubleValue]
delay:0
options:[noti.userInfo[UIKeyboardAnimationCurveUserInfoKey] integerValue]
animations:^{
self.view.y += _totalYOffset;
}
completion:nil];
_totalYOffset = 0;
}
- (void)keyboardWillChangeFrame:(NSNotification *)noti
{
}
- (void)keyboardDidShow:(NSNotification *)noti
{
}
- (void)keyboardDidHide:(NSNotification *)noti
{
}
- (void)keyboardDidChangeFrame:(NSNotification *)noti
{
}
- (void)dealloc
{
[[NSNotificationCenter defaultCenter] removeObserver:self];
}
- (void)didReceiveMemoryWarning {
[super didReceiveMemoryWarning];
}
@end
相关文章推荐
- 在 Linux 下交换 Ctrl 与大写锁定键
- CS 1.5 键盘基本操作快捷键
- C#控制键盘按键的常用方法
- C#检查键盘大小写锁定状态的方法
- 按键盘方向键翻页跳转的javascript代码(支持ie,firefox)
- C++处理键盘输入的方法
- 键盘 keycode的值 javascript时触发事件时很有用的要素
- JavaScript取得键盘按下方向键是哪个的方法
- js鼠标、键盘事件实例代码
- 如何让div span等元素能响应键盘事件操作指南
- 键盘扫描码[比较完整]
- javascript 响应键盘特定按键(只响应数字键)
- javascript键盘上下键的操作(选择)
- 使用钩子如何锁定键盘的方法分享
- js 绑定键盘鼠标事件示例代码
- javascript键盘事件全面控制脚本代码
- C++键盘记录程序代码
- JavaScript实现的使用键盘控制人物走动实例
- JS实现获取键盘按下的按键并显示在页面上的方法
- JS 屏蔽键盘不可用与鼠标右键不可用的方法