我有一个带有自定义UITableViewController的UITableViewCell,其中包含一个UITextField。当将表视图切换到编辑模式时,我在表的底部添加一个新的单元格,并希望使此单元格becomeFirstResponder。我的tableView:cellForRowAtIndexPath:方法检查这个底部单元格,所以我只添加了一行:
cell.theTextField becomeFirstResponder;
我觉得应该能行。但是,当第一次显示表视图时,它似乎无法工作。但是如果我选择了单元格(使它成为第一个响应程序),然后退出编辑模式(在我的代码中导致了一个resignFirstResponder ),我就可以回到编辑模式,神奇地它会像我所期望的那样成为第一个响应者!
请注意,即使我在结束编辑模式时选择了不同的单元格(它们都有文本字段),并且退出了编辑模式,那么它仍然工作,只要在某个时候已经做了最后一个单元格becomeFirstResponder (通过选择它)。
所以,我的猜测是,当它第一次成为第一个响应者的时候,会有一些东西在表视图中被设置,或者是一些原本没有设置的地方,从那时起,它就完成了这个工作。
有人对这里发生了什么事有什么想法吗?
发布于 2012-01-20 19:04:02
第一个becomeFirstResponder调用失败,因为单元格还没有超级视图。表视图在从tableView:cellForRowAtIndexPath:返回单元格后将其作为其子视图添加。我建议你到别的地方打这个电话。如果您已经有了一个定制的UITableViewCell子类,您可以实现didMoveToWindow:并在那里调用[self becomeFirstResponder]。
https://stackoverflow.com/questions/8946230
复制相似问题