如何控制tableview内的txextFiled不遮挡键盘?

2016-04-09  本文已影响132人  makemake

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;

}

上一篇下一篇

猜你喜欢

热点阅读