iOS:show segue阻止UITableViewController在UITextField获取焦点时自动滚动

问题描述:

我有一个通过show(push)segue呈现的UITableViewController。它的行有UITextFields。在iPhone上,当文本字段获得焦点时,如果所述文本字段朝向屏幕底部,则键盘将隐藏文本字段。iOS:show segue阻止UITableViewController在UITextField获取焦点时自动滚动

这只发生在iPhone上,除了“现在模式”或“现在作为弹出式”之外的任何时间段。对于后面的这些段,表格向上滚动文本字段,以便它不被键盘覆盖 - UITableViewController的标准行为。

在iPad上,它可以按预期工作(自动滚动表格),而不管类型如何。任何想法为什么?

我创建了一个新项目来测试它,它按预期工作。在不起作用的初始项目中,UITableViewController是SplitViewController的辅助控制器。

我测试过或没有自动布局,结果相同。

iOS8上

enter image description here

enter image description here

感谢

第一张截图显示了第二个拍摄后的最后文本框得到焦点不具有文本字段焦点 表。它被键盘覆盖。

PS:我已经尝试过,只是一个UITableViewController,而不是最初的UITableViewController的子类。我知道子类有一个问题,例如,如果你重写viewWillAppear,但不要叫超级。不是这种情况。

相关苹果文档节录:

注:表视图控制器支持表视图中的行内联编辑;例如,如果行在编辑模式下嵌入了文本字段,则它会将正在编辑的行滚动到所显示的虚拟键盘上方。它还支持NSFetchedResultsController类,用于管理从核心数据获取请求返回的结果。

UITableViewController类通过重写loadView,viewWillAppear:和其他从UIViewController继承的方法来实现上述行为。在你的UITableViewController的子类中,你也可以重写这些方法来获得专门的行为。如果你重写了这些方法,一定要调用该方法的超类实现,通常作为第一个方法调用来获取默认行为。

https://developer.apple.com/library/ios/documentation/UserExperience/Conceptual/TableView_iPhone/TableViewAndDataModel/TableViewAndDataModel.html#//apple_ref/doc/uid/TP40007451-CH5-SW7

+0

请详细说明问题所在!是否有时键盘隐藏了选定的TextField,有时却没有?你在这里模拟4种情况,iPhone与iPad和模式与节目:在什么情况下组合发生了什么? – luk2302

+0

Screenshots please?你在使用自动布局吗? –

+0

@UttamSinha - 增加了屏幕截图,谢谢 – johnnyMac

我已经检查的行为,并在iPhone 6

面临这种问题在viewDidLoad方法 -

self.tableView.tableFooterView = [[UIView alloc] initWithFrame:CGRectZero]; 
+0

谢谢@UttamSinha。这就是我试图避免的,它应该没有任何这个工作。 – johnnyMac

+0

一个简单的方法是将其写入viewDidLoad - self.tableView.tableFooterView = [[UIView alloc] initWithFrame:CGRectZero];这将按预期工作:) –

+0

我已经在viewDidLoad :) – johnnyMac

我希望我能告诉你,为什么下面的作品代码,但我不能;我意识到这是一个不好的答案。这就是说,它可以在我的应用程序中始终如一地工作。

添加一个简单的完成块到您的视图控制器解雇。在我的代码中,这意味着viewWillAppear会被调用两次,一次在解雇之前和一次之后(正如我所说的,我不知道为什么这会起作用,但它对我有用)。

dismissViewControllerAnimated(true) { self.viewWillAppear(true) }