键盘出现时滚动组tableView

时间:2012-08-25 12:09:10

标签: iphone objective-c ios uitableview uitextview

我正在尝试创建一个视图,用户输入他的信息(姓名,电子邮件,生物...)。

要做到这一点,我正在使用一个包含5个部分(0..4)的组表视图,每个部分都有一个内部有UITextField的单元格(第4节中的单元格除了{{1在里面)。

当用户点击其中一个textFields / textView时,键盘出现,并且单元格(带有选定的textField / textView)滚动到键盘正上方的位置。

我的问题在于第4节的textView,当键盘出现时,它会以某种方式自动滚动单元格以显示,但不完全在正确的位置(文本视图的一半隐藏在键盘后面)。
当我尝试自己进行滚动时(键盘完成动画制作后),我得到了一个丑陋的textView反弹。

它接触到丑陋反弹的原因是当键盘出现+我的滚动时textView自动滚动。此行为(自动滚动)仅针对textView发生,例如,如果我在第4节中使用textField而不是textView,则它不会自动滚动。

所以问题是:如何平滑地将textView滚动到正确的位置?

这是我的代码:

UITextView

1 个答案:

答案 0 :(得分:0)

我会尝试这样的事情:

·H

@interface YourViewController : UIViewController <UITextViewDelegate>

的.m

//Set delegate to your textView
textView.delegate = self

#pragma mark - TextView Delegate
//TextView Became First Responder
- (void)textViewDidBeginEditing:(UITextView *)textView{

    NSIndexPath *indexPath = [NSIndexPath indexPathForRow:0 inSection:4];

    // Other way to get the IndexPath
    //NSIndexPath *indexPath = [self.tableView indexPathForCell:(UITableViewCell *)[[textView superview] superview]];

    CGRect frame = [self.tableView rectForRowAtIndexPath:indexPath];

    //It only works for Portrait iPhone
    CGFloat keyboardHeight = 216.0f;

    CGPoint offset = CGPointMake(0, self.view.frame.size.height - keyboardHeight - frame.size.height - frame.origin.y);
    [self.tableView setContentOffset:offset animated:YES];

}

我没有对它进行测试,但这是我试图解决这个问题的方法。您可以在此处找到有关如何计算键盘大小的更多信息:(http://www.idev101.com/code/User_Interface/keyboard.html