设置:该表有1个自定义单元格。此单元格有1个文本框。在每个文本框中输入一个数字。 tableView有5行(这个单元格)。如果我在任何一个单元格中更改了一个数字,那么所有单元格都需要更新,我只需调用tableView.reloadData()
。文本框中的更改由editingDidEnd
事件处理。
问题:我单击任何textFields并更改数字。然后,我单击另一个textField来更改其值。调用第一个editingDidEnd
,重新计算所有值,并调用tableView.reloadData
。现在,由于重新加载了表格,因此错过了第二个textField的点击。
我无法直接更新单元格,因为它们是自定义单元格,并且在该类中更改了值。我无法更新自定义单元格类中的所有单元格。
一个难以解决的问题,特别针对非母语英语人士。如果你理解了这个问题,那么任何指针都会受到赞赏:)。
使用Xcode 7.1和Swift。谢谢。
答案 0 :(得分:1)
当您致电reloadData
时,所有单元格都会从tableview中删除并重新添加。由于它已被删除,因此它不再是responder chain,意味着其文本字段不能成为第一个响应者(已选择)。
有两种选择可行。
跟踪所选行,调用reloadData
,然后在文本字段中调用becomeFirstResponder
以获取正确的行。
不调用重新加载数据,只更新文本字段中的值。此选项更多取决于您应用的条纹。
答案 1 :(得分:1)
这可能非常简单,理想情况下,您可以存储要聚焦的字段的值以及相关单元格的索引路径(例如重新加载后重新生成编辑字段时?)< / p>
此代码应该有所帮助:
- (void)tableView:(UITableView *)tableView
willDisplayCell:(UITableViewCell *)cell
forRowAtIndexPath:(NSIndexPath *)indexPath
{
if(indexPath == self.editingIndexPath)
{
[self.editingTextField becomeFirstResponder];
}
}