iPhone:如何在自定义单元的动态数量上管理 UITextfield 委托方法

Posted

技术标签:

【中文标题】iPhone:如何在自定义单元的动态数量上管理 UITextfield 委托方法【英文标题】:iPhone:How to manage UITextfield delegate methods on dynamic number of customcells 【发布时间】:2011-08-13 11:48:12 【问题描述】:

我的表格视图中有动态数量的文本字段,我将每个文本字段放入 IB 中的自定义单元格中,并按 nibName 加载单元格。

我想在用户输入数据时验证并显示警报,同时在editisDone 时我想从用户那里获取输入值并将其保存到相关对象。

例如,这些是我可以使用的一些委托方法:

- (void)textFieldDidEndEditing:(UITextField *)textField
   //save the data


- (IBAction)textFieldDoneEditing:(id)sender 
    //hide the keypad when done is pressed
    [sender resignFirstResponder];


- (BOOL)textField:(UITextField *)textField shouldChangeCharactersInRange

2 个问题:

1-当获取用户输入并验证输入时,我如何知道哪个文本字段的委托被触发,因为单元格和文本字段的数量是动态的,我该如何管理?

2-为了隐藏键盘,我这样做了,但不确定这是正确的; - 在 IB 中,我打开了 customcell-->右键单击 uitextfield 并将其 didEndonExit 连接到 FirstResponder 的 textFieldDoneEditing 方法。这有效,但如果我没有向文本字段添加任何字符,我将无法返回。所以它会强制写一些东西才能按下按钮。

【问题讨论】:

使用 tag 属性找出哪个 UITextField 触发了委托。例如,您可以使用行 indexPath 作为标记。 【参考方案1】:

关于你的第一个问题……

在下面的代码中,我假设您在每个单元格中都有一个UITextField。我还假设您创建了一个名为 CustomCellUITableViewCell 子类,其中包含一个 UITextField

#pragma mark - UITableViewDataSource 

- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath

   static NSString *CellIdentifier = @"CellIdentifier";
   CustomCell *cell = (CustomCell *)[tableView dequeueReusableCellWithIdentifier:CellIdentifier];
   if (!cell)
   
      cell = [[[CustomCell alloc] initWithStyle:UITableViewCellStyleDefault identifier:CellIdentifier] autorelease];
      cell.textField.tag = indexPath.row;
      cell.textField.delegate = self;
   
   return cell; 


#pragma mark - UITextFieldDelegate 

- (void)textFieldDidEndEditing:(UITextField *)textField

   NSLog(@"textField tag: %d", textField.tag); // this will show which textField did end editing ...

【讨论】:

tnx 这很好用,你对剩下的问题有什么想法吗?输入内容前无法返回 今天晚些时候我会尝试为您的第二个问题发布解决方案。【参考方案2】:

关于你的第二个问题;如果我正确理解您的问题,取消选中 IB 文本字段属性中的“自动启用返回键”应该允许您按下返回按钮,即使它是空的。我在 UIView 中的一个简单文本字段上对此进行了测试,但它应该适用于您的情况。

【讨论】:

以上是关于iPhone:如何在自定义单元的动态数量上管理 UITextfield 委托方法的主要内容,如果未能解决你的问题,请参考以下文章

使用后台容器在自定义列表视图上加载动态数据

在自定义单元 iphone 中使用按钮传输变量

如何管理单行中的多个标签但没有。表格视图中的单元格数量取决于 iPhone SDK 中的数组。

如何在自定义单元格的 initWithStyle: 方法中获取 UITableView 的宽高?

iPhone:如何从视图控制器中获取自定义单元格的按钮操作?

如何在自定义 UITableView 单元格上获取 UITextField 值