在表格视图中使用带有文本字段的 endEditing 时崩溃
Posted
技术标签:
【中文标题】在表格视图中使用带有文本字段的 endEditing 时崩溃【英文标题】:Crash when using endEditing with textfields in a table view 【发布时间】:2014-02-18 17:59:18 【问题描述】:在我的代码中,我在UITableView
中有大约 8 个UITextField
s,每个都连续。我还有一个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 时崩溃的主要内容,如果未能解决你的问题,请参考以下文章