从 UISplitViewController 显示时,UITableViewController 自动滚动停止考虑键盘

Posted

技术标签:

【中文标题】从 UISplitViewController 显示时,UITableViewController 自动滚动停止考虑键盘【英文标题】:UITableViewController auto-scrolling stops taking into account keyboard when shown from a UISplitViewController 【发布时间】:2014-11-13 05:10:31 【问题描述】:

当您继承UITableViewController 时,您通常会“免费”获得某些行为。例如,当表格视图中的文本字段成为第一响应者时,视图控制器会自动滚动以确保该字段完全可见。

但是,当表格视图控制器是 UISplitViewController 的详细视图控制器时,此自动滚动不再考虑键盘的存在。表格视图控制器仍将自动滚动以使文本字段保持在屏幕范围内,但不再滚动以防止字段被键盘覆盖。

您可以通过使用 Xcode 的“主从应用程序”模板创建一个新项目,并用一个表格视图控制器替换详细视图控制器来自己测试这一点,该控制器显示带有文本字段的单元格。

我想了解为什么在这种情况下自动滚动会停止占用键盘,如果可能的话,如何在不必自己复制自动滚动功能的情况下进行纠正。顺便说一句,这与覆盖 viewWillAppear 无关(就像这里关于表格视图控制器自动滚动的一些其他问题一样)。

【问题讨论】:

因此,如果它是主要的UITableViewController UITableView 响应 UITextField 开始编辑委托调用,那么接线可能是硬编码的,但是如果您的 UITableViewController 不是根控制器。我不知道,但这并不让我感到惊讶。这就是为什么我一开始就不喜欢使用UITableViewController,我认为这意味着您需要自己编写UITextField 接线。 【参考方案1】:

我知道它已经晚了,但这可能会帮助遇到此问题的其他人。当我在 UITableViewCell 中添加文本字段时,这也发生在我身上。我所做的是删除

superViewWilAppear:动画

viewWillAppear 方法中的一行。所以该方法看起来像这样

-(void)viewWillAppear:(BOOL)animated
    //[superViewWilAppear:animated];
     Your rest of code
 

但是这样做的目的是消除所有的自动滚动,并且当 textField 开始编辑时,您必须管理 UITableView 的滚动。不知道这是否解决了您的问题,但它会为您省去考虑不同设备的键盘高度的麻烦,并且更好地自行管理。我也不确定这是否是正确的方法,但它对我有用。

【讨论】:

以上是关于从 UISplitViewController 显示时,UITableViewController 自动滚动停止考虑键盘的主要内容,如果未能解决你的问题,请参考以下文章

从 UISplitViewController 呈现的 modalViewController 出现方向错误

UISplitViewController - 从详细信息更新主表视图

UISplitViewController 从任何地方平移到主视图

从 UISplitViewController 显示时,UITableViewController 自动滚动停止考虑键盘

如何从 UISplitViewController IOS 5 导航回来?

从 UISplitViewController 中的 Detail 视图控制器导航到正常的全尺寸 UIViewController