编辑完成后,如何防止表格单元格的textview可编辑?

时间:2010-05-18 22:30:59

标签: iphone uitableview uitextfield editing

所以这是一个有趣的问题。我有自定义tableviewcells包含文本字段。在我的cellForRowAtIndexPath中,我有一个if语句,用于确定单元格的文本字段是否应该是可编辑的 - 它看起来像这样:

(self.isEditing) ? [infoCell.textField setEnabled:YES] : [infoCell.textField setEnabled:NO];

这实际上运作良好 - 除了我遇到的问题。它使得当显示tableview时,无法编辑行的文本字段。当用户单击“编辑”将其置于编辑模式时,则启用文本字段进行编辑。

问题:当我编辑字段并单击“完成”时,它会返回到常规表视图,但键盘保持可见,而我正在编辑的最后一个单元格的文本字段仍然是编辑。

会发生什么:键盘应该消失,所有单元格的文本字段都不再可编辑。

关于可能出现什么问题的任何想法?要找的东西?

谢谢!

2 个答案:

答案 0 :(得分:2)

不幸的是,禁用UITextField不会解除键盘。您需要保留指向当前UITextField的指针。首先,在头文件中创建一个实例变量:

UITextField *currentTextField;

然后,实现UITextFieldDelegate协议。肮脏的工作将通过以下方法完成:

- (void)textFieldDidBeginEditing:(UITextField *)textField
{
    currentTextField = textField;
}

最后,当您准备关闭键盘并禁用textFields时,只需致电:

[currentTextField resignFirstResponder];
[textField1 setEnabled:NO];
[textField2 setEnabled:NO]; //ad nauseum
祝你好运!

答案 1 :(得分:1)

我发现self.isEditing不可靠。如果您正在编辑单个单元格,则其工作方式与处于“编辑模式”时的工作方式不同。

我所做的就是,每当我想对所有其他单元格执行某些操作时,我只需遍历表格视图的visibleCells方法并手动调整它们。你必须考虑当新细胞变得可见时会发生什么,但这取决于你的实施。

NSArray *visibleCells = [self.tableView visibleCells];
for (UITableViewCell *cell in visibleCells) {
    [cell doSomething];
}

PS - 显然你可能想要在迭代可见方块时跳过有问题的单元格。取决于你在做什么。