2011-12-31 104 views
1

目前我在每个UITableViewCell中都有一个UITextField,但问题是,如果有2个或更多个单元格,则可能会切断单元格。键盘阻塞UITableViewCell的UITextField?

有没有简单的方法可以让我的键盘打开时单元格可见?

谢谢!

回答

1

如果我正确理解你的问题,你希望视图在键盘显示时滚动。 如果你使viewController成为UITableViewController的子类,我相信你可以免费滚动。不幸的是,唯一的其他选择并不那么简单。您需要充分利用委派方法来上下移动您的视图(并且如果您希望它通过键盘向上滑动,则可以对其进行动画处理)。有很多答案可以找到,所以我不会详细介绍这里的几个链接来帮助你!

In depth explation here

Great explanation here

Some UIScrollView details here

More here

+0

我阅读了这些文章,但是这里的问题是,我不需要每次都移动tableview,但前提是阻止了我的文本字段所在的单元格。 – 2011-12-31 03:26:02

+0

是的,这些大多数都是针对。您不想*仅*调整视图的大小,如果它将被阻止。您想每次调整大小,以便用户仍然可以一直滚动到底部。你所做的是确定由键盘创建的偏移量,缩小视图的大小,然后根据需要将视图滚动到合适的位置。如果该单元格已经在视图中,您可以简单地不滚动并保持原样。您也可以选择始终将选定的单元移动到可见区域的中心,但这取决于您。 – MGA 2011-12-31 07:24:52

+0

而不是做所有这些疯狂的代码量,我只是将textField设置为navigationBar标题,并做到这一点,就像一样简单! – 2011-12-31 17:27:24

2

这工作很适合我,如果有人仍然需要回答:

- (void)textFieldDidBeginEditing:(UITextField *)textField 
{ 
    if (self.tableView.contentOffset.y == 0) 
    { 
     [UIView animateWithDuration:0.0 delay:0.5 options:UIViewAnimationOptionAllowUserInteraction animations:^{ 
     } completion:^(BOOL finished) { 
      UITableViewCell *cell = (UITableViewCell*) [[textField superview] superview]; 
      [self.tableView scrollToRowAtIndexPath:[self.tableView indexPathForCell:cell] atScrollPosition:UITableViewScrollPositionTop animated:YES]; 
     }]; 
    } 
} 

问题在于滑动到单元时没有考虑键盘,所以我只是在一个小的延迟模块中添加了该调用。

+0

感谢您的支持!它适用于我没有检查contentOffset.y = 0。由于未知的原因,我的UITableView会自动滚动显示iOS 6中的文本字段,但在iOS 5中需要此帮助。 – 2013-03-27 06:18:53