使tableviewcell在显示键盘时向上滚动

时间:2011-05-23 00:01:13

标签: iphone xcode uitableview uitextfield

我有一个带UITextField的UITableViewCell。在编辑模式下,当键盘出现时,我尝试编辑的行会​​被键盘重叠。理想情况下,该行应向上滚动,以便我可以编辑单元格。

我已经彻底搜索了stackoverflow并找到了几种不同的解决方案。它们中的大多数都与计算有关,可以向上移动或滚动视图。现在有一个名为TaggedLocations的苹果示例代码。他们有完全相同的行为。并且没有任何代码可以执行任何复杂的计算来移动视图。

我还彻底检查了IB界面,但也找不到任何奇特的东西。如果你下载并运行代码,它会精美地将行推到一个完美的位置进行编辑。

有人知道TaggedLocations项目中有哪些技巧可以做到这么优雅吗?项目地点: http://developer.apple.com/library/ios/#samplecode/TaggedLocations/Introduction/Intro.html%23//apple_ref/doc/uid/DTS40008914

对于我所指的复杂计算,请查看以下线程,例如:

How to make a UITextField move up when keyboard is present?

感谢

4 个答案:

答案 0 :(得分:1)

RootViewController.m中的这一行是导致滚动的原因:

[self.tableView scrollToRowAtIndexPath:indexPath atScrollPosition:UITableViewScrollPositionTop animated:YES];

将它放在cellForRowAtIndexPath:方法中,它应该有效。

答案 1 :(得分:1)

我弄明白了这个问题。 最初我有

TabBarController
  - UIViewController
      - UINavigationController
       --- UITableViewController

  - UIViewController
     - -UINavigationController
       --- UITableViewController

使用这种层次结构时,表格单元格在显示键盘时不会卷起。但是,如果我将层次结构更改为以下内容,则无需任何其他代码就可以正常滚动!

TabBarController
- UINavigationController
       - UITableViewController

- UINavigationController
       - UITableViewController

当我复制Apple代码时,我不知何故弄乱了层次结构。现在切换到新的层次结构,它工作正常。 无需额外的代码或计算。

答案 2 :(得分:0)

或调用viewWillAppear,如果你有自己的控制器层次结构......那么当键盘出现时,表格视图会自动滚动单元格以便显示。

答案 3 :(得分:0)

我对Apple的示例代码TaggedLocations有类似的混淆,虽然在我的情况下我意识到我的表视图是由UIViewController子类管理而不是UITableViewController子类,而UITableViewController显然是为你管理滚动。它工作得很好,因此很多这些复杂的计算都是不必要的。我希望我没有花太多时间试图解决它们。

我不明白为什么你描述的层次结构很重要。只要UITableViewController管理文本字段,它就应该自动处理滚动以避开键盘。