因项目需求,一个页面中有十几个输入框用于提交。每个cell样式都一样,直接一个cell就实现。
上方的输入框点击后键盘不会遮挡,下方的会遮挡,一开始也是像网上说得那样,设置tableview的偏移,但输入完后必须点击完成或者别的地方收缩键盘,才可下次输入,且tabelview不可滚动。
我先解决键盘不能滚动的问题,就不用tableview的偏移,直接缩小tableview的高度,让tableview的高度变为原来的高度减去键盘的高度。这样在键盘上方的tableview也能滑到底部且不会被键盘遮挡,这里用键盘出现消失的通知不再多说。
不可滚动解决了,开始解决偏移,又尝试了获取cell在tableview中的坐标位置,偏移到那一点,效果是实现了,但是不是在键盘正上方,效果不理想。
之后就把代码删了,只剩缩小tableview高度了,一运行,哎?被遮挡的textfield自动便宜到键盘之上了,检查代码,就只有两点,一个是textfield 加了个事件,是开始编辑事件,在事件里将当前的textfield设为第一响应者,之后键盘弹出缩小tableview高度。
代码
[textfield addTarget:self action:@selector(beginedit:) forControlEvents:UIControlEventEditingDidBegin];
-(void)beginedit:(UITextField*)textfield{
[textfield becomeFirstResponder];
}
-(void)keyBoardWasShowd:(NSNotification*)keyboardNotification{
NSDictionary*info=[keyboardNotification userInfo];
CGSize keyboardSize=[[info objectForKey:UIKeyboardFrameEndUserInfoKey]CGRectValue].size;
CGRect begin = [[[keyboardNotification userInfo] objectForKey:UIKeyboardFrameBeginUserInfoKey] CGRectValue];
CGRect end = [[[keyboardNotification userInfo] objectForKey:UIKeyboardFrameEndUserInfoKey] CGRectValue];
//获取不同的键盘高度,取最后显示的键盘高度作为当前键盘
if(begin.size.height>0 && (begin.origin.y-end.origin.y>0)){
[UIView animateWithDuration:0.2 animations:^{
self.tableView.frame=CGRectMake(0,_tableView.frame.origin.y,Screen_Width,Screen_Height-64-keyboardSize.height);
}];
}