【发布时间】:2013-12-15 08:24:18
【问题描述】:
当我的 tableView 被编辑时,我有一个带有插入附件的行,它会在其上方插入一个新的 table view 单元格,该单元格有一个文本字段。如何使文本字段处于活动状态(即 becomeFirstResponder)?例如如果您在 Apple 通讯录应用中添加新手机,它会自动选择新行的文本字段并出现键盘。
从网上搜索看来,单元格的 textField 并没有立即添加到队列中,因此您必须在正确的时间调用 becomeFirstResponder。我应该什么时候调用它?
在 commitEditingStyle: forRowAtIndexPath 我试过: ...
else if (editingStyle == UITableViewCellEditingStyleInsert) {
[tableView insertRowsAtIndexPaths:@[indexPath] withRowAnimation:UITableViewRowAnimationTop];
MyCustomCell* cell = [tableView cellForRowAtIndexPath: indexPath];
[cell.textField becomeFirstResponder];
}
没用。
在 cellForRowAtIndexPath 中我也尝试过(有点小技巧):
if (cell.textField.text.length == 0) {
[conditionCell.textField becomeFirstResponder];
}
但它似乎也没有在那里做出反应。 (成为第一响应者返回 FALSE)
调用 becomeFirstResponder 的正确位置在哪里?
谢谢
编辑:实际上问题是因为我在 cellForRowAtIndexPath 中有以下行:
cell.textField.enabled = NO;
除非表格处于编辑模式,否则我不希望 textFields 处于活动状态,因此我禁用了它们,并且只有在表格处于编辑模式时才在 didSelectCellAtIndexPath 中重新启用它们。
为什么你应该发布你的所有代码的主要例子,而不仅仅是你认为相关的sn-ps。
【问题讨论】:
-
你试过'willDisplayCell'吗?
-
这很奇怪,但
becomeFirstResponder在cellForRowAtIndexPath中为我工作 -
对于新插入的行?
-
没关系,我想通了; becomeFirstResponder 工作得很好,因为在我的实现中最初禁用了 textFields。
标签: ios uitableview uitextfield becomefirstresponder