0

我在 UITableView 的第一个单元格中有 UITextField,每当它更改表时,它也会发生变化。问题是,当表格更新时,该字段会失去第一响应者状态并且becomeFirstResponder不会再次使其成为第一响应者 - 键盘消失了。

我调用[_searchField becomeFirstResponder]tableView:didEndDisplayingCell:forRowAtIndexPath: 但键盘无论如何都会消失。更新:我之前尝试在 cellForRowAtIndexPath 中调用 becomeFirstResponder,它也没有工作。_searchField 是连接到该字段的单元格类的出口属性。

我应该在哪里打电话becomeFirstResponder,以便该字段成为第一响应者?或者也许我应该以某种不同的方式来做,这样该字段就不会失去第一响应者的状态?我尝试刷新的不是整个表格,而是单独的部分(搜索字段在它自己的部分中),但它不起作用,控制器试图显示不再存在的单元格,所以我更喜欢刷新整个表格。

我知道我可以使用特殊的搜索控制器,但我不喜欢它的设计,所以我以这种方式实现它......

谢谢!

4

1 回答 1

7

实际上,我应该[self.tableView reloadData]在同一方法中简单地调用 becomeFirstResponder AFTER,而不是尝试在 UITableViewCell 子类或 UITableViewController 类中查找表刷新后调用的某些方法。

我一开始没有这样做,可能是因为我没有对调用 [self.tableView reloadData] 的地方的单元格的引用。

就是这样(SOPSearchCell 是 UITableViewCell 的子类,self 是 UITableViewController 子类实例):

[self.tableView reloadData]
// make searchField first responder again
NSUInteger indexes[] = {0, 0};
NSIndexPath *indexPath = [NSIndexPath indexPathWithIndexes:indexes length:2];
SOPSearchCell *cell = (SOPSearchCell *)[self.tableView cellForRowAtIndexPath: indexPath];
[cell.searchField becomeFirstResponder];
于 2013-05-19T22:18:43.743 回答