【问题标题】:How do I prevent my table cell's textview from being editable after editing is done?编辑完成后如何防止表格单元格的文本视图可编辑?
【发布时间】:2010-05-18 22:30:59
【问题描述】:

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

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

这实际上效果很好 - 除了我遇到的问题。它使得在显示 tableview 时,无法编辑行的文本字段。当用户单击“编辑”使其进入编辑模式时,文本字段将被启用以进行编辑。

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

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

对可能出现的问题有任何想法吗?要寻找的东西?

谢谢!

【问题讨论】:

    标签: iphone uitableview uitextfield editing


    【解决方案1】:

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

    UITextField *currentTextField;
    

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

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

    最后,当您准备好关闭键盘并禁用文本字段时,只需调用:

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

    祝你好运!

    【讨论】:

      【解决方案2】:

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

      我为解决这个问题所做的是,每当我想对所有其他单元格做某事时,我只需遍历我的表格视图的 visibleCells 方法并手动调整它们。您必须考虑新单元格变得可见时会发生什么,但这取决于您的实施。

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

      PS - 显然,您可能希望在遍历可见方块时跳过有问题的单元格。取决于你在做什么。

      【讨论】:

      • 感谢您的建议。我玩过它,但我认为它不会为此工作。单元格是自定义单元格,我需要启用或禁用的是单元格内的文本字段,而不是单元格本身。目前我在 cellForRowAtIndexPath 中执行此操作,当我从编辑模式切换到常规模式时,它不适用于正在编辑的单元格......非常奇怪。顺便说一句,你是对的 self.isEditing 不可靠,我使用的是我自己的 isEditing 变量。
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2017-06-30
      • 2012-10-08
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多