tableView reloadData 失去文本字段焦点
Posted
技术标签:
【中文标题】tableView reloadData 失去文本字段焦点【英文标题】:tableView reloadData loses textfield Focus 【发布时间】:2013-02-27 19:05:53 【问题描述】:我有一些带有文本字段和其他标签的单元格。基本上,在用户使用键盘输入数据后,他们可以导航到另一个文本字段(通过各种方式),我将他们希望进入的文本字段保存在指针中,然后设置触发文本字段的 didEndEditing 方法的第一响应者。在 didEndEditing 中,我调用了一个刷新方法来重新加载 tableData 以更新各种标签,然后我尝试再次将 setFirstResponder 设置到我存储的文本字段中。
最终结果是键盘停留在屏幕上,但文本字段没有获得焦点。但是,如果您再试一次,它会再次起作用...
这是一些代码。请记住,很多处理计算和日志等的内容已被删除。我只添加了与此问题相关的内容。
edit 另外,我知道我提到我正在使用箭头按钮进行导航。如果您不使用箭头按钮,问题也在这里。离开另一个文本字段后,您必须手动按下(或单击)两次才能获得焦点。
//user presses an arrow button to enter textfield
//logic is done here to find what the next textfield would be
_nextTextFieldSelection = (UITextField *)[[_tableView cellForRowAtIndexPath:destinationIndexPath] viewWithTag:newTag];
[_nextTextFieldSelection becomeFirstResponder];
- (void)textFieldDidEndEditing:(UITextField *)textField
//some stuff for calculations
[self refreshScreen]
- (void)refreshScreen
[_tableView reloadData];
//set tables values
[_nextTextFieldSelection becomeFirstResponder];
【问题讨论】:
«已经删减了很多处理计算和日志等的内容。我只添加了与此问题相关的内容。»我可以得到一个阿门! 如果在重新加载表格视图后它是一个不同的文本字段,我不会感到惊讶。尝试在reloadData
之后立即通过[[_tableView cellForRowAtIndexPath:destinationIndexPath] viewWithTag:newTag];
再次获取引用,并查看它是否仍然与_nextTextFieldSelection
相同。
这个有道理,我试试看。
您的解决方案对 Josh 有效,但我无法选择您的答案,因为您将其作为评论。
呃,我已经有足够的代表了。很高兴我能帮上忙。
【参考方案1】:
当您重新加载表格时,会重新创建单元格。您缓存的nextTextFieldSelection
可能不再是对正确文本字段实例的引用。尝试缓存 indexPath 而不是文本字段,然后使用您的标签从给定索引路径的单元格中获取适当的文本字段。
【讨论】:
【参考方案2】:另一种解决方案 - 使用tableView.insertRows(at: indexPaths, with: .automatic)
【讨论】:
【参考方案3】:我遇到了同样的问题 - 在 tableview reloadData 后失去焦点。 但是添加, tableview reloadData 方法后的 cellForRowAtIndexPath 解决了它。此答案已在 cmets 中给出,但考虑在此处添加以获得更多可见性。
【讨论】:
以上是关于tableView reloadData 失去文本字段焦点的主要内容,如果未能解决你的问题,请参考以下文章
tableView.reloadData() 不起作用,可能没有在主线程上调用
在 UITableView 上 reloadData 后文本字段没有被选中
使用 tableView.reloadData() 重新加载 TableView 的问题
Swift:tableView.reloadData() 太慢了