如何在自定义 UITableView 中获取文本字段
Posted
技术标签:
【中文标题】如何在自定义 UITableView 中获取文本字段【英文标题】:How to get textFields in custom UITableView 【发布时间】:2012-11-06 21:34:32 【问题描述】:非常初学者的 obj-c 问题。
我有两个部分的普通 UITableView,但我现在只对第一部分感兴趣。此部分有四个自定义单元格(继承自标准 UITableViewCell),它们有一个 UITextField 作为属性。
我需要使用按钮“下一步”、“上一个”(用于在表格视图中的文本字段之间切换)和“完成”(关闭键盘)来改进自定义输入附件视图。 http://uaimage.com/image/62f08045
在 -textFieldShouldReturn 中,我将 textFields 的标签设置为从 0 到 3。我的下一个计划是将 textFields 添加到 -viewDidLoad 中的 NSMutableArray 中,然后设置并退出 textFields 的第一响应者。 “下一步”按钮的大致代码清单:
- (void) inputAccessoryViewDidSelectNext:(FDInputAccessoryView *)view
for (UITextField *textField in [self textFieldsArray])
if ([textField isFirstResponder])
[textField resignFirstResponder];
UITextField *field = [[self textFieldsArray] objectAtIndex:textField.tag + 1];
[field becomeFirstResponder];
问题:
这是正确的方法还是有更好的方法来解决问题? 我需要标记文本字段或在它们内置的单元格中使用 indexPath 吗? (或者什么是最好的跟踪文本字段?) 主要问题是:从单元格中“获取”文本字段的语法是什么?对不起,愚蠢的问题,我是一个非常初学者。
谢谢, 亚历克斯。
【问题讨论】:
【参考方案1】:我认为你的想法是对的,但我想到了一些事情:
为了安全起见,不要从标记号 0 开始。每个视图都有一个默认为 0 的标记号,因此您可能会得到意想不到的结果。 不要将文本视图的标签设置在textFieldShouldReturn
中,将标签设置在cellForRowAtIndexPath
或viewDidLoad
中,无论您在哪里初始化文本字段。
将文本字段添加到单元格的 contentView,而不是单元格本身。
您不必从第一个文本字段中退出第一响应者,您只需在新文本字段上 becomeFirstResponder
。
确保您正在处理最后一个文本视图边缘情况:您可以循环到第一个文本字段或在最后关闭键盘。
如果要获取单元格中的textField:
UITableViewCell *cell = [self.tableView cellForRowAtIndexPath:
[NSIndexPath indexPathForRow:ROW_NUMBER inSection:1]];
UITextField *textField = (UITextField *)[cell.contentView viewWithTag:TEXT_FIELD_TAG];
【讨论】:
- 将文本字段添加到单元格的 contentView,而不是单元格本身。我怎样才能做到这一点?如果现在它是一个属性,这是否会改变单元格和 textField 之间的关系? 用[cell.contentView addSubview:testField]
代替[cell addSubview:textField]
。
非常感谢您提供如此有用的答案!
嗨,我也在做同样的事情,我对标签值有疑问。我应该如何为自定义 UI 文本字段提供标签号。我试过self.customeTextField.tag =1
,但它不起作用以上是关于如何在自定义 UITableView 中获取文本字段的主要内容,如果未能解决你的问题,请参考以下文章
如何在自定义 UITableView 单元格上获取 UITextField 值
iOS Swift:在自定义 UITableView 单元格中更新二维数组时获取重复值