2010-05-18 50 views
1

所以这是一个有趣的问题。我有自定义tableviewcells,其中包含一个文本字段。当在我的cellForRowAtIndexPath我有一个if语句来确定小区的文本字段是否不应该editable-它看起来像这样:如何防止我的表格单元格的textview在编辑完成后可编辑?

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

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

问题:当我编辑字段,然后单击“完成”,它可以追溯到到正规的tableview,但键盘保持可见和最后一个单元格的文本字段我是编辑继续编辑。

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

任何有关可能出错的想法?需要寻找的东西?

谢谢!

回答

2

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

UITextField *currentTextField; 

然后,实施UITextFieldDelegate协议。肮脏的工作将在下面的方法来完成:

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

最后,当你准备取消键盘和禁用文本框,只需拨打:

[currentTextField resignFirstResponder]; 
[textField1 setEnabled:NO]; 
[textField2 setEnabled:NO]; //ad nauseum 

祝你好运!

+0

这是完美的! – Brad 2010-05-20 15:52:28

1

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

我做了什么来解决它,只要我想对所有其他单元格做些什么,我只是遍历我的表视图的visibleCells方法并手动调整它们。你必须考虑新单元变得可见时会发生什么,但这取决于你的实现。

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

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

+0

感谢您的建议。我玩过它,但我认为它不会为此工作。单元格是自定义单元格,它是我需要启用或禁用的单元格内的文本字段,而不是单元格本身。目前我在cellForRowAtIndexPath中执行此操作,并且在从编辑模式切换到常规模式时,它对于正在编辑的单元格不起作用...非常奇怪。顺便说一下,你说得对self.isEditing是不可靠的,我使用我自己的isEditing变量。 – Brad 2010-05-20 14:32:06

相关问题