如何将TableView单元格滚动到屏幕键盘的方式?

时间:2011-06-18 15:02:44

标签: ios uitableview uitextfield

这一定是一个常见的问题......我在表格单元格中有一个UITextField,我想让用户编辑它。但是,当键盘出现时,它通常会遮挡文本字段。

我已尝试使用scrollToRowAtIndexPath:atScrollPosition,但令人惊讶的是,这不起作用。我已尝试将UITableViewScrollPosition设为{None,Top,Button,Middle}

我缺少滚动的秘诀是什么?

感谢。

2 个答案:

答案 0 :(得分:3)

秘诀是你必须手动实施这种行为,这很痛苦。

您必须采取以下几个步骤:

第1步:注册键盘通知

- (void)viewWillAppear:(BOOL)animated
{
    [super viewWillAppear:animated];

    [[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(keyboardWasShown:) name:UIKeyboardDidShowNotification object:nil];
    [[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(keyboardWillBeHidden:) name:UIKeyboardWillHideNotification object:nil];

}

步骤2:在键盘出现时调整内容插入的大小

- (void)keyboardWasShown:(NSNotification *)notification {
    NSDictionary* info = [notification userInfo];
    CGSize kbSize = [[info objectForKey:UIKeyboardFrameBeginUserInfoKey] CGRectValue].size;

    UIEdgeInsets contentInsets = UIEdgeInsetsMake(0.0f, 0.0f, kbSize.height, 0.0f);
    self.tableview.contentInset = contentInsets;
    self.tableview.scrollIndicatorInsets = contentInsets;

    [self.scrollView scrollRectToVisible:self.selectedView.frame animated:YES];
}

这假设您的班级中有一个名为“selectedView”的属性。还有其他方法可以做到这一点,但主要的是,你需要知道用户需要查看哪个视图。

第3步:键盘消失时重置表格视图

- (void)keyboardWillBeHidden:(NSNotification *)notification {
    UIEdgeInsets contentInsets = UIEdgeInsetsZero;
    self.tableview.contentInset = contentInsets;
    self.tableview.scrollIndicatorInsets = contentInsets;
}

第4步:取消注册通知

- (void)viewWillDisappear:(BOOL)animated {
    [super viewWillDisappear:animated];

    [[NSNotificationCenter defaultCenter] removeObserver:self name:UIKeyboardDidHideNotification object:nil];
    [[NSNotificationCenter defaultCenter] removeObserver:self name:UIKeyboardDidShowNotification object:nil];
}

答案 1 :(得分:-1)

那么,你的表格单元是否隐藏了你的文本域?你为什么要用滚动来解决它?更改将文本字段添加到单元格的方式。