如何在UITextView不可见时隐藏键盘?

3

我在一个带自定义单元格的UITableView(Controller)中放置了一些UITextViews,并且遇到了一个问题。用户可以点击导航栏上的“编辑”按钮将表格设置为编辑模式 - 每个自定义单元格都有启用其各自的UITextViews进行文本输入的方法。这很好地发挥作用。

我的问题是,如果焦点在用户按下“完成”时滚动出视图的文本视图上,则键盘仍然保持打开状态,文本视图仍处于编辑模式。如果文本视图在视图内,则不会发生这种情况。更具体地说 - 我正在查看的单元格位于屏幕顶部,如果被滚动到iPhone屏幕以上,它会表现得很奇怪。当底部的文本视图被滚动出去时,我似乎没有同样的问题。

我已经尝试过几乎所有可能的排列组合来使视图退出响应者,但我觉得隐藏的文本视图直到重新进入屏幕或其他文本视图获取焦点之前都不会收到或发送任何消息(甚至任何委托方法)。

我错过了什么?

1个回答

1

在全天的工作中,我学到了以下内容:

  1. 你实际上无法访问UITableView中不可见的单元格。虽然这在我的情况下令人沮丧,但也是有道理的。
  2. 无论重绘多少次或尝试手动取消第一响应者,都不会有帮助,即使您指向特定行中的特定单元格。
  3. setEditing:animated:(在点击“完成”按钮时调用)并不是唯一的事情。
  4. 我猜UITextView保持编辑模式的原因是缓存版本的单元格处于编辑模式,并且这些各种表方法(如setEditing:animated:)不会调用缓存的单元格/数据。

这是我找到的解决方案:(在UISearchBar和resignFirstResponder中):
* 调用[self.tableView endEditing:YES]会导致所有视图取消第一响应者,这意味着我的UITextView不再被选中。我不确定为什么它以这种方式工作,但似乎setEditing:被发送到每个单元格并相应地重新绘制。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接