UITextField becomeFirstResponder在动态单元格内部不起作用

时间:2013-05-19 20:41:44

标签: ios objective-c uitableview uitextfield first-responder

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

我在tableView中调用[_searchField becomeFirstResponder]:didEndDisplayingCell:forRowAtIndexPath:但键盘仍然消失。更新:我之前尝试在cellForRowAtIndexPath中调用了becomeFirstResponder,它也没有用。 _searchField是连接到该字段的单元类的outlet属性。

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

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

谢谢!

1 个答案:

答案 0 :(得分:7)

实际上,我应该在同一个方法中简单地调用afterFirstResponder AFTER [self.tableView reloadData],而不是试图找到在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];