繁体   English   中英

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

[英]How to handle references to UITextFields in dynamic UITableView (iPhone)

我有一个UITableView ,它被分解为用户定义的sections 在每个sections有2 rows 这两rows中的每一rows包含一个用户可以编辑的UITextField

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

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

尝试1

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

尝试2

我试图掌握UITableViewsections数量(这很好)。 然后我想通过每个迭代section中的UITableView ,在记录值rows各。 这是我失去的地方,因为我不知道该怎么做或者甚至可能。

如果这是一个天真的问题,我很抱歉,但是我真的很挣扎,并且会感激任何建议。

请记住,文本字段在滚动时会被重用,因此您并不真正想要存储对它们的引用。

您所做的是在输入信息时捕获信息。 最简单的方法是在委托中实现textFieldDidEndEditing协议方法。

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

然后,在textFieldDidEndEditing中,通过其superview访问tableViewCell indexPath属性。 即:

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

这样做可以让您知道单元格的节和行。

像这样在Table的cellForRow中创建TextField并给它一个标记

    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];  

然后像这样访问TextField:

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

如果将文本字段的文本保留在数组中而不是文本字段本身,则“尝试1”应该可以正常工作。 (任何试图查看或控制数据对象的东西很有可能出错。)

无论作为表视图的数据源,如果内容单独存储,应该能够根据节和行重新填充滚动的单元格。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM