编辑时尝试使用 UITextField 制作自定义 UITableViewCell becomeFirstResponder
Posted
技术标签:
【中文标题】编辑时尝试使用 UITextField 制作自定义 UITableViewCell becomeFirstResponder【英文标题】:Trying to make a Custom UITableViewCell with a UITextField becomeFirstResponder when Editing 【发布时间】:2012-01-20 18:38:41 【问题描述】:我有一个带有自定义 UITableViewCell
s 的 UITableViewController
,其中包含一个 UITextField
。将表格视图切换到编辑模式时,我在表格底部添加了一个新单元格,并希望将此单元格设为becomeFirstResponder
。我的tableView:cellForRowAtIndexPath:
方法检查这个底部单元格,所以我只添加了以下行:
[cell.theTextField becomeFirstResponder];
我认为应该可以。但是,当第一次显示表格视图时,它似乎不起作用。但是,如果我选择单元格(使其成为第一响应者),然后退出编辑模式(在我的代码中导致 resignFirstResponder
),然后我可以返回编辑模式并神奇地成为我所期望的第一响应者!
请注意,即使我选择了不同的单元格(它们都有文本字段)结束编辑模式并退出编辑模式,然后重新进入,它仍然可以工作,只要 在某个时候,我创建了最后一个单元格becomeFirstResponder
(通过选择它)。
所以,我的猜测是,当它第一次成为第一响应者时,会在表格视图或其他最初未设置的地方设置一些东西,从那时起它就开始工作了。
有人对这里可能发生的事情有任何想法吗?
【问题讨论】:
【参考方案1】:第一个becomeFirstResponder
调用失败,因为单元格还没有超级视图。从tableView:cellForRowAtIndexPath:
返回后,表格视图会将单元格添加为其子视图。我建议你在其他地方打这个电话。如果你已经有一个自定义的UITableViewCell
子类,你可以实现didMoveToWindow:
并在那里调用[self becomeFirstResponder]
。
【讨论】:
感谢您的建议,但有几件事。 1)我如何只为那个单元格(而不是所有单元格)选择它,2)我尝试将它添加到我的自定义单元格类中,但它没有做任何事情。我也试过把它放在 tableView:willDisplayCell:forRowAtIndexPath: 中,我可以只为那个单元格做一个“if”,但它仍然没有用。 嗯,这很难。进入编辑模式时如何添加单元格?如果一切都失败了,您可以在延迟后执行becomeFirstResponder
,但这很丑陋、脆弱,只能作为最后的手段。
这里是相关部分:[self.tableView beginUpdates]; if (编辑) [self.tableView insertRowsAtIndexPaths:[NSArray arrayWithObject:indexPathForNewLabel] withRowAnimation:UITableViewRowAnimationAutomatic]; [self.tableView endUpdates];以上是关于编辑时尝试使用 UITextField 制作自定义 UITableViewCell becomeFirstResponder的主要内容,如果未能解决你的问题,请参考以下文章
使用自定义 UITableViewCell 时在编辑之前更改 UITextField 文本
如何使用 @IBDesignable 和 @IBInspectable 制作 uitextfield 的自定义子类并在那里我可以从左侧设置占位符填充