您的位置:首页 > 其它

监听键盘状态

2016-04-18 00:45 363 查看
第一种写法,通知中心添加观察者分别观察显示和隐藏

- (void)viewDidLoad {
[super viewDidLoad];

//增加监听,当键盘出现或改变时收出消息
[[NSNotificationCenter defaultCenter] addObserver:self
selector:@selector(keyboardWillShow:)
name:UIKeyboardWillShowNotification
object:nil];

//增加监听,当键退出时收出消息
[[NSNotificationCenter defaultCenter] addObserver:self
selector:@selector(keyboardWillHide:)
name:UIKeyboardWillHideNotification
object:nil];

}

//当键盘出现或改变时调用
- (void)keyboardWillShow:(NSNotification *)aNotification
{
//获取键盘的高度
NSDictionary *userInfo = [aNotification userInfo];
NSValue *aValue = [userInfo objectForKey:UIKeyboardFrameEndUserInfoKey];
CGRect keyboardRect = [aValue CGRectValue];
int height = keyboardRect.size.height;
self.view.backgroundColor = [UIColor redColor];

NSLog(@"%d",height);
}

//当键退出时调用
- (void)keyboardWillHide:(NSNotification *)aNotification
{
//获取键盘的高度
NSDictionary *userInfo = [aNotification userInfo];
NSValue *aValue = [userInfo objectForKey:UIKeyboardFrameEndUserInfoKey];
CGRect keyboardRect = [aValue CGRectValue];
int height = keyboardRect.size.height;
self.view.backgroundColor = [UIColor cyanColor];
NSLog(@"结束%d",height);
}

- (void)touchesBegan:(NSSet<UITouch *> *)touches withEvent:(UIEvent *)event {
[self.view endEditing:YES];
}

- (void)dealloc
{
//移除通知
[[NSNotificationCenter defaultCenter] removeObserver:self name:UIKeyboardWillShowNotification object:nil];
[[NSNotificationCenter defaultCenter] removeObserver:self name:UIKeyboardWillHideNotification object:nil];
}


第二种写法 二合一

- (void)viewDidLoad {
[super viewDidLoad];

[[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(keyboardWillChangeFrame:) name:UIKeyboardWillChangeFrameNotification object:nil];
}

- (void)keyboardWillChangeFrame:(NSNotification *)notification {

NSInteger keyboardBeginY = [notification.userInfo[UIKeyboardFrameEndUserInfoKey] CGRectValue].origin.y;

NSLog(@"keyboardBeginY = %zd",keyboardBeginY);
}

- (void)touchesBegan:(NSSet<UITouch *> *)touches withEvent:(UIEvent *)event {
[self.view endEditing:YES];
}

- (void)dealloc
{
//移除通知

[[NSNotificationCenter defaultCenter] removeObserver:self];
}


获取键盘弹出的动画类型

//键盘尺寸
CGSize kbSize = [[info objectForKey:UIKeyboardFrameEndUserInfoKey] CGRectValue].size;
//持续时间
CGFloat duration = [[info objectForKey:UIKeyboardAnimationDurationUserInfoKey]floatValue];
//动画类型
NSInteger anType = [[info objectForKey:UIKeyboardAnimationCurveUserInfoKey]integerValue];

[UIView animateKeyframesWithDuration:duration delay:0 options:anType animations:^{

CGRect rect = weakKeyView.frame;
rect.origin.y -= kSize.height;
weakKeyView.frame = rect;

} completion:^(BOOL finished) {
}];
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: