[英]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
我试图掌握UITableView
的sections
数量(这很好)。 然后我想通过每个迭代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.