在我的代码中,我在UITextField
中有大约8 UITableView
个,每个都在一行中。我还有一个UIBarButtonItem
,选中后会调用方法hideKeyboard
。
当用户选择一个文本字段,然后滚动tableview以便文本字段不再可见但键盘保持显示然后点击uibarbuttonitem我得到一个EXC_BAD_ACCESS。
文本字段以编程方式通过cellForRowAtIndexPath
放置在每一行中。 hideKeyboard
只是[self.view endEditing:YES];
。
所以我的猜测是,因为endEditing
搜索第一个响应者的textField并调用它,但是当它成为第一个响应者时我以一种未显示的方式滚动tableview ,该单元格必须已被重用,文本字段必须已被释放..但是endEditing方法仍然会调用它来辞职......那可能发生崩溃。
我考虑过获取最后一个第一个响应者的引用但是如果它被解除分配我无论如何都无法辞职..我也不能调用becomeFirstResponder然后在随机文本域中辞职,因为我不知道哪些是当时可见。
有没有人知道这次崩溃的原因是什么?我如何正确地解雇键盘?
答案 0 :(得分:2)
如果用户将活动文本字段滚动到视图之外,也许您可以决定重新签署第一响应者状态。您可以在tableViewDelegate协议方法中执行此操作:
- tableView:didEndDisplayingCell:forRowAtIndexPath: