BUG环境:
1.控制器:tableviewController
2.自定义cell内使用textfiled
3.- (CGRect)convertRect:(CGRect)rect fromView:(UIView *)view 方法获取到的textFiled的CGRect是一个固定值,没法用
4.通知中心监测键盘弹出事件、各种计算、计算、计算改变view.fram的值都不尽人意
- (void)keyBoardWillShow:(NSNotification *)noti
//
{
NSLog(@"键盘弹出");
NSLog(@"%@", noti.userInfo);
CGRect keyFrame = [noti.userInfo[@"UIKeyboardFrameEndUserInfoKey"] CGRectValue];
CGFloat keyHeight = keyFrame.size.height; // 键盘的高度;
// 键盘高度 >屏幕高 - 当前屏幕有内容的高度
CGFloat h = kScreenHeight - kScreenHeight / 4 * _sectionNum;
if (keyHeight > h ) { // 意味着键盘挡住textField:
CGRect rect = self.view.frame;
rect.origin.y -= keyHeight - h ; // textFiled的父视图,往上移动;
self.view.frame = rect;
}
}
解决方案:
主要代码如下:
- (BOOL)textFieldShouldBeginEditing:(UITextField *)textField
{
UITableViewCell * cell=(UITableViewCell *)[[textField superview] superview];
NSIndexPath *indexPath=[self.tableView indexPathForCell:cell];
if (indexPath.section==0) {
}else {
[UIView beginAnimations:@"ResizeForKeyBoard" context:nil];
//========核心代码===========
//获取当前tableview的contensize.heght 加上 键盘高度 + 键盘的tabbar高度 = 260 刚刚好
self.tableView.contentSize = CGSizeMake(0, self.tableView.contentSize.height + 260);
}
return YES;
}
//收键盘
-(BOOL)textFieldShouldReturn:(UITextField *)textField
{
[textField resignFirstResponder];
return YES;
}
NSNotificationCenter *center = [NSNotificationCenter defaultCenter];
// 注册监听:
[center addObserver:self selector:@selector(keyBoardWillHide:) name:UIKeyboardWillHideNotification object:nil];
- (void)keyBoardWillHide:(NSNotification *)noti
{
// NSLog(@"键盘收起");
self.tableView.contentSize = CGSizeMake(0, self.tableView.contentSize.height - 260);
self.view.frame = self.view.bounds;
}