如何滚动屏幕键盘的UITableView单元格?

问题描述:

这一定是一个常见问题...我在表格单元格内有UITextField,我想让用户编辑它。但是,当键盘出现时,它经常会遮挡文本字段。如何滚动屏幕键盘的UITableView单元格?

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

我失踪的滚动秘诀是什么?

谢谢。

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

+0

他的问题是,如何避免被隐藏在文本框键盘 – kubi

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

有你要采取的一些步骤:

第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]; 
} 
+0

谢谢。我试图在没有通知的情况下做类似的事情,当然这不起作用。现在确实如此。 – Starboo

+0

@Starboo不要使用硬编码值,它将在未来的iOS版本中几乎肯定会崩溃。如果你的文本区域飞出屏幕,可能是因为你没有正确设置'selectedView',但没有更多的代码只是猜测。 – kubi

+0

不错的答案kubi。 – otto