在单个UITableViewCell中管理多个UITextField

时间:2015-12-22 12:37:36

标签: objective-c iphone uitableview uitextfield

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

如何提供标记以识别哪个UITextField被点击?

4 个答案:

答案 0 :(得分:1)

如果UITextFeild's中有多个UITableViewCell,请为textfield方法中的每个cellForRowAtIndex添加标记。然后当您点按textfield时,UITextFieldDelegate会被点击。

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

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

如果您考虑委托方法:

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

答案 1 :(得分:0)

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

我在这些场景中通常做的是在标签中编码2个值。

例如,您可以像这样保存:

textField.tag = indexPath.row * 1000 + TEXTFIELD_INDEX

然后,在该textField的委托方法上,您将检索它:

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

textField索引将作为标记的余数1000存储,行本身将存储为数千个。

注意:执行此操作时存在隐含限制,其中每个单元格中最多只能包含1000个textFields,以及大约2000000个单元格。假设tag是32位整数。但我觉得这很合理:)

答案 2 :(得分:0)

您可以在storyboard或nib文件中设置标记。

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

答案 3 :(得分:0)

您可以将标签设置为

 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
  }
 }
}