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
。我还假设您创建了一个名为 CustomCell
的 UITableViewCell
子类,其中包含一个 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 SDK 中的数组。
如何在自定义单元格的 initWithStyle: 方法中获取 UITableView 的宽高?