UI相关 动画 动态cell UIcollectionviewiOS DeveloperiOS开发资料收集区

键盘遮挡输入框的问题

2016-06-20  本文已影响89人  yueY_zhou

首先在textfield的代理中注册键盘显示和消失的通知事件

- (void)textFieldDidBeginEditing:(UITextField*)textField
{   
  //监听键盘的即将显示事件. UIKeyboardWillShowNotification    
  [[NSNotificationCenterdefaultCenter]addObserver:selfselector:@selector(keyboardWillShow:)name:UIKeyboardWillShowNotificationobject:nil];   
  //监听键盘即将消失的事件. UIKeyboardWillHideNotification    
  [[NSNotificationCenterdefaultCenter]addObserver:selfselector:@selector(keyboardWillHide:)name:UIKeyboardWillHideNotificationobject:nil];   
}

键盘显示的触发事件

- (void) keyboardWillShow:(NSNotification*)notification 
{   
  //获取键盘高度,在不同设备上,以及中英文下是不同的   
  CGFloat kbHeight = [[notification.userInfoobjectForKey:UIKeyboardFrameEndUserInfoKey]CGRectValue].size.height;   
  //计算出键盘顶端到TextField panel底端的距离(加上自定义的缓冲距离INTERVAL_KEYBOARD)   
  CGFloat offset = (TextField.frame.origin.y+TextField.frame.size.height+INTERVAL_KEYBOARD) - (self.view.frame.size.height- kbHeight);   
  //取得键盘的动画时间,这样可以在视图上移的时候更连贯   
  double duration = [[notification.userInfoobjectForKey:UIKeyboardAnimationDurationUserInfoKey]doubleValue];   
  //将视图上移计算好的偏移   
  if(offset >0) 
    {        
      [UIView animateWithDuration:duration animations:^{           
      self.view.frame=CGRectMake(0.0f, -offset,self.view.frame.size.width,self.view.frame.size.height);        
      }];    
    }
}

键盘消失的触发事件

- (void) keyboardWillHide:(NSNotification *)notify 
{    
  // 键盘动画时间    
  double duration = [[notify.userInfo objectForKey:UIKeyboardAnimationDurationUserInfoKey] doubleValue];    
  //视图下沉恢复原状    
  [UIView animateWithDuration:duration animations:^{        
      self.view.frame = CGRectMake(0, 0, self.view.frame.size.width, self.view.frame.size.height);   
     }];
}
上一篇下一篇

猜你喜欢

热点阅读