处理键盘遮挡自定义cell上的textField
在viewController里面监听键盘出现以及消失,
//键盘监控
[[NSNotificationCenterdefaultCenter]addObserver:selfselector:@selector(keyboardWillShow:)name:UIKeyboardWillShowNotificationobject:nil];
[[NSNotificationCenterdefaultCenter]addObserver:selfselector:@selector(keyboardWillHide:)name:UIKeyboardWillHideNotificationobject:nil];
然后再键盘将要出现的方法里面作如下处理:
/**
*键盘即将出现
*/
- (void)keyboardWillShow:(NSNotification*)notif
{
NSDictionary*info = [notif userInfo];
NSValue*value = [info objectForKey:UIKeyboardFrameEndUserInfoKey];
CGSize keyboardSize = [value CGRectValue].size;
self.currentKeyBoardSize=keyboardSize;//获取到键盘的高度(不管是第三方键盘还是系统自带的)
NSIndexPath* path=[NSIndexPath indexPathForRow:self.currentTF.tag inSection:0];//获取到点击的textField所属的cell的path
CGRect rect4TableView=[self.orderTableView rectForRowAtIndexPath:path];//获取到cell在tableView上的坐标
NSString*str =NSStringFromCGRect(rect4TableView);//结构体转化为字符串
NSSLog(@"rect4TableView==%@",str);
CGRect rect4SuperView=[self.orderTableView convertRect:rect4TableView toView:self.view]; //获取到cell在当前view的坐标
NSString*str2 =NSStringFromCGRect(rect4SuperView);
NSSLog(@"rect4TableView==%@",str2);
CGFloat textY=rect4SuperView.origin.y+rect4SuperView.size.height;//cell距顶部的距离 +rect4SuperView.size.height是因为获取的只是cell顶部到view顶部的距离
NSSLog(@"textY==%.2f",textY);
CGFloat bottomY=SCREEN_HEIGHT-textY;//将要编辑的tf所属的cell距底部的距离
NSSLog(@"bottomY==%.2f",bottomY);
if(bottomY>=keyboardSize.height)
{
return;
}
self.currentContentOffset=self.orderTableView.contentOffset.y;//获取到点击textField时,tableView的偏移量
NSSLog(@"当前出去的距离:%.2f",self.orderTableView.contentOffset.y);
CGFloat height_move=keyboardSize.height-bottomY+self.orderTableView.contentOffset.y;//要移动的距离
[self.orderTableView setContentOffset:CGPointMake(0, height_move) animated:YES];//让tableView内容上移
}
/**
*键盘即将消失
*/
- (void)keyboardWillHide:(NSNotification*)notif
{
[self.orderTableView setContentOffset:CGPointMake(0,self.currentContentOffset) animated:YES];//结束输入的时候tableView内容回到之前的位置
}