当键盘出现时,带有大单元格的 UITableViewController 会崩溃,隐藏 UITextView

Posted

技术标签:

【中文标题】当键盘出现时,带有大单元格的 UITableViewController 会崩溃,隐藏 UITextView【英文标题】:UITableViewController with large cells freaks out when a keyboard appears, hiding the UITextView 【发布时间】:2014-04-10 22:58:21 【问题描述】:

我创建了一个新项目只是为了测试它。

演示

创建一个主从项目。在Main_iPhone.storyboard

    将原型单元格样式更改为自定义。 使表格视图的行高504 以每个单元格填充整个屏幕。 将UITextView 填充到原型单元的下半部分。 在MasterViewController.m 中,从cellForRowAtIndexPath: 中删除此行
cell.textLabel.text = [object description];

运行项目并添加一些单元格。然后点击文本视图以编辑内容。

问题描述

每次我点击文本视图时,单元格都会向上滚动以暂时显示文本视图(应该如此),然后向下滚动以显示单元格的顶部,这会将文本视图隐藏在键盘。

视频

本题有问题视频:UITableView in ios 7 not scrolling to correct location when editing UITextView in cell

问题

这可能是什么原因造成的?你能找到任何关于 UITableViewController 如何处理键盘的 Apple 文档吗?

【问题讨论】:

最后,你是如何解决这个问题的? 现在记起来太久远了,但我想我只是将UIViewController 子类化并在其中放入UITableView,并以VC 作为其数据源和委托。 【参考方案1】:

我能够使用TPKeyboardAvoidingTableView 解决这个问题并将其添加到我的UITableViewController 子类中:

- (void)viewWillAppear:(BOOL)animated

    // Removed to avoid default tableview scrolling behavior when the keyboard appears
    //[super viewWillAppear:animated]; 

仅使用TPKeyboardAvoidingTableView 是不够的,因为UITableViewController 的默认行为会覆盖它。阻止viewWillAppear 运行是我能找到阻止这种行为的唯一方法。但我不喜欢这个解决方案,因为我不知道我还会失去什么。

【讨论】:

阻止对super 的调用不是可接受的解决方案。你为什么不子类化 UITableViewController 而不是子类化 UIViewController 并将其设置为 TableView 委托/数据源? 我知道该怎么做,但这样我不会失去某种功能吗? 没有。没有我能想到的。有些事情UITableViewController 会自动完成,但没有什么是您自己无法实现的。 这就是问题所在……我不知道那些东西是什么。我什至在任何地方都找不到说明 UITableViewController 会在键盘出现时自动滚动的文档。 可能缺少某些功能...然后当您发现您缺少功能时返回并实现它...这比依赖于阻止超类执行的修复更好东西。

以上是关于当键盘出现时,带有大单元格的 UITableViewController 会崩溃,隐藏 UITextView的主要内容,如果未能解决你的问题,请参考以下文章

当键盘中的“下一步”返回按钮时滚动带有文本字段的表格视图

切换uitextf时停止键盘关闭

EXC_BAD_ACCESS 重新加载带有文本字段的单元格

在 UITableView 中处理自定义单元格的点击不会发生

带有自定义 xib 的 TableCellView 未加载

tableview 中的两个 TextFields,都在滚动视图上,当键盘出现 iPhone 时消失