iOS大牛修炼之路

iOS全局处理键盘事件

2016-04-06  本文已影响1034人  才不是想成为啊

最近做的项目中,有一个类似微信的聊天发送框,屏幕底端有一个输入框用textView来做,当textView成为第一响应者的时候它的Y值随着键盘高度的改变而改变,保证textView紧贴着键盘,但又不会被键盘挡住。


先来看一下关于键盘的一些通知代理

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

注册通知来观察键盘的显示和隐藏

   [[NSNotificationCenter defaultCenter] addObserver:self
                                             selector:@selector(keyboardWillShow:)
                                                 name:UIKeyboardWillShowNotification
                                            object:nil];
    
   [[NSNotificationCenter defaultCenter] addObserver:self
                                             selector:@selector(keyboardWillHide:)
                                                 name:UIKeyboardWillHideNotification
                                               object:nil];

接着就是监听方法

#pragma 监听方法
- (void)keyboardWillShow:(NSNotification *)notify {//键盘弹起改变TextView位置
    
   //拿到键盘尺寸
    CGRect rect = [notif.userInfo[UIKeyboardFrameEndUserInfoKey] CGRectValue];

   //取得键盘高度
    CGFloat keyBoardHeight = rect.size.height;
    
  //TextView的y = 整个屏幕高度 - 键盘高度 - TextView的高度
     [UIView animateWithDuration: [notif.userInfo[UIKeyboardAnimationDurationUserInfoKey] doubleValue] animations:^{
        
        TextView.y = KSCREENHEIGHT -keyBoardHeight - TextView.height;
    }];
    
}

- (void)keyboardWillHide:(NSNotification *)notification {//键盘回收改变TextView的位置
    
//TextView的y = 整个屏幕高度 -  TextView的高度
    [UIView animateWithDuration:[notification.userInfo[UIKeyboardAnimationDurationUserInfoKey] doubleValue] animations:^{
        TextView.y = KSCREENHEIGHT  - TextView.height;
    }];
}
上一篇下一篇

猜你喜欢

热点阅读