如何处理动态UITableView(iPhone)中对UITextFields的引用



我有一个UITableView被分解成用户定义的sections数。在这些sections中的每一个中,总是有 2 个rows .这两个rows中的每一个都包含一个用户可以编辑的UITextField

我需要的是一种能够在以后访问这些UITextFields中的数据的方法。我希望这将是一个简单的问题,但它给我带来了很大的悲伤。

到目前为止,我已经尝试了两种方法:

尝试 1

我创建了两个NSMutableArrays在其中将UITextField对象添加到索引 i(对应于它的来源section)。然后,我尝试通过遍历数组来访问这些值。这不起作用,因为UITextFields不断被擦拭干净。每次我向下滚动表格并且UITextField不在视野中时,当我返回时,它的内容已被擦拭干净。

尝试 2

我试图掌握UITableView中的sections数量(这很好)。然后我想遍历UITableView的每个section,记录每个rows中的值。这就是我摆脱困境的地方,因为我不确定如何做到这一点,或者是否有可能。

如果这是一个幼稚的问题,我深表歉意,但我真的很挣扎,并希望得到任何建议。

请记住

,文本字段会在滚动时重复使用,因此您实际上不想存储对它们的引用。

相反,您要做的是在输入信息时捕获信息。 执行此操作的最简单方法是在委托中实现 textFieldDidEndEditing 协议方法。

棘手的部分是弄清楚文本字段在哪一行。 最好的方法是创建一个具有NSIndexPath属性的UITableViewCell子类。 然后,您可以在使用 tableview:willDisplayCell:forRowAtIndexPath: 配置单元时进行设置。

然后,在 textFieldDidEndEditing 中,通过其超级视图访问 tableViewCell indexPath 属性。 即:

NSIndexPath indexPathOfParentCell = [(MyUITableViewCellSubclass *)self.superview indexPath]; 
这样做

可以让您知道单元格的部分和行。

像这样在表格的单元格中创建您的文本字段并给它一个标签

    UITextField * userField = [[[UITextField alloc] initWithFrame:CGRectMake(0, 12, self.view.frame.size.width -20, 20)] autorelease];
    userField.tag = 1001;
    userField.font = [UIFont fontWithName:@"HelveticaNeue-Bold" size:14];
    userField.textAlignment = UITextAlignmentCenter;
    userField.delegate = self;
    userField.autocorrectionType = UITextAutocorrectionTypeNo;
    userField.autocapitalizationType = UITextAutocapitalizationTypeNone;
    userField.clearButtonMode = UITextFieldViewModeWhileEditing;
    if (indexPath.row == 0)
        [cell.contentView addSubview:userField];  

然后像这样访问文本字段:

    UITextField *userField = (UITextField *)[[(UITableViewCell *)[(UITableView *)tableView cellForRowAtIndexPath:[NSIndexPath indexPathForRow:0 inSection:0]] contentView] viewWithTag:1001];
如果将

文本字段的文本保留在数组中而不是文本字段本身中,则"尝试 1"应该可以正常工作。 (任何试图将视图或控件转换为数据对象的东西都很有可能出错。

如果内容是单独存储的,则充当表视图数据源的任何内容都应该能够根据部分和行重新填充滚动的单元格。

最新更新