所以这是一个有趣的问题。我有自定义tableviewcells包含文本字段。在我的cellForRowAtIndexPath中,我有一个if语句,用于确定单元格的文本字段是否应该是可编辑的 - 它看起来像这样:
(self.isEditing) ? [infoCell.textField setEnabled:YES] : [infoCell.textField setEnabled:NO];
这实际上运作良好 - 除了我遇到的问题。它使得当显示tableview时,无法编辑行的文本字段。当用户单击“编辑”将其置于编辑模式时,则启用文本字段进行编辑。
问题:当我编辑字段并单击“完成”时,它会返回到常规表视图,但键盘保持可见,而我正在编辑的最后一个单元格的文本字段仍然是编辑。
会发生什么:键盘应该消失,所有单元格的文本字段都不再可编辑。
关于可能出现什么问题的任何想法?要找的东西?
谢谢!
答案 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 - 显然你可能想要在迭代可见方块时跳过有问题的单元格。取决于你在做什么。