码迷,mamicode.com
首页 > 其他好文 > 详细

通过KVO来监听键盘弹出和弹回

时间:2015-11-02 00:12:40      阅读:497      评论:0      收藏:0      [点我收藏+]

标签:

在通知中心建立一个广播来监听键盘的弹出和弹回,在监听事件中加入触发事件的一些操作。

[[NSNotificationCenter defaultCenter]addObserver:self selector:@selector(keyboardWillChange:) name:UIKeyboardWillChangeFrameNotification object:nil];
    [[NSNotificationCenter defaultCenter]addObserver:self selector:@selector(keyboardwillhide:) name:UIKeyboardWillHideNotification object:nil];

监听键盘的一些通知:

    // 键盘的frame发生改变时发出的通知(位置和尺寸)
    //    UIKeyboardWillChangeFrameNotification
    //    UIKeyboardDidChangeFrameNotification
    // 键盘显示时发出的通知
    //    UIKeyboardWillShowNotification
    //    UIKeyboardDidShowNotification
    // 键盘隐藏时发出的通知
    //    UIKeyboardWillHideNotification
    //    UIKeyboardDidHideNotification

在这里我需要实现的效果(如下图)是在在键盘弹出时,使下方的toolbar向上移动到相应位置,因此需要知道键盘的高度和弹出动画的时间,通过广播监听来得到键盘的frame和弹出动画时间:

NSString *duration = userInfo[UIKeyboardAnimationDurationUserInfoKey];
    CGRect keyboardFrame = [userInfo[UIKeyboardFrameEndUserInfoKey] CGRectValue];

再通过动画效果,改变tableview和toolbar的frame,使得键盘在弹出时不会被遮挡:

 [UIView animateWithDuration:[duration doubleValue] delay:0.0 options:UIViewAnimationOptionCurveLinear animations:^{
        _tableview.frame = CGRectMake(0, 64 , SIZE.width, SIZE.height - 64 - keyboardFrame.size.height - 50);
        footView.frame = CGRectMake(0, SIZE.height - keyboardFrame.size.height - 50, SIZE.width, 50);
    } completion:^(BOOL finished) {
        NSIndexPath *path = [NSIndexPath indexPathForRow:_dataArray.count - 1 inSection:0];
        [_tableview scrollToRowAtIndexPath:path atScrollPosition:UITableViewScrollPositionBottom animated:YES];
    }];

效果图:

技术分享

通过KVO来监听键盘弹出和弹回

标签:

原文地址:http://www.cnblogs.com/moxuexiaotong/p/4928944.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!