【问题标题】:Managing multiple UITextField in a single UITableViewCell在单个 UITableViewCell 中管理多个 UITextField
【发布时间】:2015-12-22 12:37:36
【问题描述】:

我在单个UITableviewCell 中有多个UITextField。 我知道我们可以使用标签识别UITableViewCell 中的subviews。 但在我的场景中,我在单个 UITableViewCell 中有多个 UITextField

如何提供标签来识别点击了哪个UITextField

【问题讨论】:

  • 每个 UITextfields 的标签,然后您可以比较 row=1、tag=1 等。
  • @AnoopVaidya:感谢您的回复,但我在单个 UITableViewCell 中有多个文本字段。
  • 是的,为什么你不能为它们每个都设置标签/标识符?
  • @AnoopVaidya:能否详细说明一下?
  • 您可以使用自定义协议和委托方法

标签: objective-c iphone uitableview uitextfield


【解决方案1】:

当您的UITableViewCell 中有多个UITextFeild's 时,请在您的cellForRowAtIndex 方法中为每个textfield 提供标记。然后当你点击textfield 时,UITextFieldDelegate 就会被击中。

例如,当您点击textfield 时,textFieldShouldBeginEditing 会被击中。

或者,您甚至可以将观察者添加到您的文本字段,然后您可以简单地验证点击了哪个文本字段。

如果考虑委托方法:

- (BOOL)textFieldShouldBeginEditing:(UITextField *)textField
{
   if(textfield.tag==1)
   {
      //you tapped textfield 1
   }
}

【讨论】:

    【解决方案2】:

    如果我理解正确,由于每个单元格中有多个 textField,因此仅使用该行作为标记仍然无法区分它与该特定行是哪个 textField。

    在这些场景中,我通常会在标签中编码 2 个值。

    例如你可以这样保存:

    textField.tag = indexPath.row * 1000 + TEXTFIELD_INDEX
    

    然后,在该 textField 的委托方法上,您可以像这样检索它:

    NSInteger textFieldIndex = textField.tag % 1000;
    NSInteger row = textField.tag / 1000;
    

    textField 索引将存储为标记上 1000 的余数,而行本身将存储为千位。

    注意:这样做有一个隐含的限制,即每个单元格中最多只能有 1000 个文本字段,大约 2000000 个单元格。假设标签是一个 32 位整数。但我觉得这很合理:)

    【讨论】:

      【解决方案3】:

      您可以在故事板或 nib 文件中设置标签。

      选择文本字段,选择右侧的属性选项卡,在视图部分修改标签。

      【讨论】:

        【解决方案4】:

        你可以设置一个标签像

         cell.contentView.subviews.enumerated().forEach { (offset, view) in
            (view as! UITextField).tag = 100 + offset 
         }
        

        然后在

        extension ViewController:UITextFieldDelegate {
        
        func textFieldDidBeginEditing(_ textField: UITextField) {
        
          if textField.tag == 101 {
            // first textField
          } else if textField.tag == 102 {
            // second textField
          } else {
           // else
          }
         }
        }
        

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 2010-09-29
          • 2011-03-09
          • 1970-01-01
          • 2010-09-25
          • 1970-01-01
          • 2021-05-21
          • 2013-07-19
          • 1970-01-01
          相关资源
          最近更新 更多