【问题标题】:UITableViewController with large cells freaks out when a keyboard appears, hiding the UITextView当键盘出现时,带有大单元格的 UITableViewController 会崩溃,隐藏 UITextView
【发布时间】:2023-03-31 09:30:01
【问题描述】:

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

演示

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

  1. 将原型单元格样式更改为自定义。
  2. 使表格视图的行高504 以每个单元格填充整个屏幕。
  3. UITextView 填充到原型单元的下半部分。
  4. 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 作为其数据源和委托。

标签: ios uitextview uitableview uikeyboard


【解决方案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 会在键盘出现时自动滚动的文档。
  • 可能缺少某些功能...然后当您发现您缺少功能时返回并实现它...这比依赖于阻止超类执行的修复更好东西。
猜你喜欢
  • 2015-02-22
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-07-16
  • 2016-10-19
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多