当键盘出现时,带有大单元格的 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的主要内容,如果未能解决你的问题,请参考以下文章