1

我有一个UITableViewControllerwith custom UITableViewCell,其中包含一个UITextField. 将表格视图切换到编辑模式时,我在表格底部添加了一个新单元格,并希望制作这个单元格becomeFirstResponder。我的tableView:cellForRowAtIndexPath:方法检查这个底部单元格,所以我只添加了以下行:

[cell.theTextField 成为FirstResponder];

我认为这应该有效。但是,当第一次显示表格视图时,它似乎不起作用。但是,如果我选择单元格(使其成为第一响应者),然后退出编辑模式(resignFirstResponder在我的代码中导致 a),然后我可以返回编辑模式并神奇地成为我所期望的第一响应者!

请注意,即使我选择了不同的单元格(它们都有文本字段)结束编辑模式并退出编辑模式,然后重新进入,它仍然可以工作,只要在某个时候我已经制作了最后一个单元格becomeFirstResponder(通过选择它)。

所以,我的猜测是,当它第一次成为第一响应者时,会在表格视图或其他最初没有设置的地方设置一些东西,从那时起它就可以工作了。

有人对这里可能发生的事情有任何想法吗?

4

1 回答 1

1

第一次becomeFirstResponder调用失败,因为该单元还没有超级视图。表格视图在您从tableView:cellForRowAtIndexPath:. 我建议你在其他地方打这个电话。如果您已经有一个自定义UITableViewCell子类,您可以在那里实现didMoveToWindow:和调用[self becomeFirstResponder]

于 2012-01-20T19:04:02.003 回答