在表格视图中使用带有文本字段的 endEditing 时崩溃

Posted

技术标签:

【中文标题】在表格视图中使用带有文本字段的 endEditing 时崩溃【英文标题】:Crash when using endEditing with textfields in a table view 【发布时间】:2014-02-18 17:59:18 【问题描述】:

在我的代码中,我在UITableView 中有大约 8 个UITextFields,每个都连续。我还有一个UIBarButtonItem,当它被选中时,调用方法hideKeyboard

当用户选择一个文本字段,然后滚动 tableview 以使文本字段不再可见但键盘保持显示,然后点击 uibarbuttonitem 我得到一个 EXC_BAD_ACCESS。

文本字段通过cellForRowAtIndexPath 以编程方式放置在每一行中。 hideKeyboard 就是 [self.view endEditing:YES];

所以我的猜测是,因为 endEditing 搜索作为第一响应者的 textField 并在其上调用 resign 但是当它成为第一响应者并且我以未显示的方式滚动 tableview 时,单元格必须已被重用并且文本字段必须已被释放..但 endEditing 方法仍会调用它来辞职……这可能是崩溃发生的时候。

我想过获得最后一个 firstResponder 的引用,但如果它被解除分配,我无论如何都无法辞职。我也不能调用 becomeFirstResponder 然后在随机文本字段中辞职,因为我不知道哪些是当时可见。

有人知道这次崩溃的原因是什么吗?如何正确关闭键盘?

【问题讨论】:

【参考方案1】:

如果用户将活动文本字段滚动到视野之外,也许您可​​以决定放弃第一响应者的身份。您可以在 tableViewDelegate 协议方法中这样做:

– tableView:didEndDisplayingCell:forRowAtIndexPath:

【讨论】:

以上是关于在表格视图中使用带有文本字段的 endEditing 时崩溃的主要内容,如果未能解决你的问题,请参考以下文章

如何在表格视图 IOS 内的滚动视图中创建文本字段

带有图像和文本字段的自动布局表格单元格?

滚动表格视图时删除的文本字段值?

使用单击子视图中的表格单元格来填充视图中的字段

如何使用视图顶部的工具栏滚动表格视图

根据在单元格中的文本字段中输入的值动态增加表格视图单元格