iOS键盘覆盖输入框的处理

2013-08-033lian10 的分享   加三联MM小编微信好友:sanlian2018

   在一个多项输入界面上,会有多个UITextfield类型的输入框。为了滚动方面,我们会将他们一一添加到UITableView的cell中,从而组成一个可以上下滑动的数据输入界面。

  但是字符输入是通过系统自动弹出软键盘来完成的,因此在选择屏幕底端的cell时,会被软键盘的区域所覆盖。

  同样,正因为输入框是在UITableView的cell中,所以可以将所在的cell滚动到软键盘覆盖的区域之上的位置。使得我们能看到输入框。

  现在,我们要实现这个操作过程。

  我们可以简单的将该cell滚动到表视图的可见区域的最上方的位置。

  UITableView提供了这个方法“scrollToRowAtIndexPath:atScrollPosition:animated:”。作为第一反应者的输入框,可以它的委托方法- (void)textFieldDidBeginEditing:(UITextField*)textField

  将其赋值一个变量lastEditTextField中。软键盘的出现和消失都注册到该视图控制器类中,并实现它的方法。这样,在UITextField激活弹出键盘时,系统会自动提交一个软键盘弹出的通知。键盘弹出通知会调用一个方法。

  该方法要实现的逻辑是根据lastEditTextField所在的位置点,得到操作的cell,再将此cell滚动到视图可见区域的最上方。

  CGPoint pt =lastEditTextField.center;

  pt = [self.tableView convertPoint:ptfromView:lastEditTextField.superview];

  NSIndexPath* indexPath = [self.tableViewindexPathForRowAtPoint:pt];

  [self.tableView scrollToRowAtIndexPath:indexPathatScrollPosition:UITableViewRowAnimationTop animated:YES];

  这段代码中,最重要的是根据lastEditTextField.center的值,通过UIView的实例方法-(CGPoint)convertPoint:(CGPoint)point fromView:(UIView *)view 将它转成self.tableview的坐标体系下的值。再根据新坐标体系中lastEditTextField.center的值,通过UITableView的实例方法scrollToRowAtIndexPath:atScrollPosition:animated:将该cell滚动到屏幕最上方。

  在键盘消失时,系统会再发送一个通知,将屏幕恢复到原来的位置。

  将输入框滚动到最上方,虽然能满足我们的输入可见要求。但是,如果能只滚动到软键盘之上方,而不是UITableView的最上方;在输入框不在键盘覆盖的区域时,是不需要滚动的。这样的处理,将是更满意的结果。

TA发布的帖子

893

收藏

605