我正在尝试创建一个注册表单,其中包含大约 20 个不同的字段,分为四个不同的部分。我为此创建了一个自定义单元格,其中包含一个标签和一个 UITextField,并且我的 tableview 上有一个字典数组,指示标签的名称应该是什么,以及 texftield 的标签(因为根据我使用 UIPicker 输入数据的标签)。
问题是,当我开始编辑字段时,向下滚动和备份所有内容都会变得混乱,并且在字段上更改它不应该......我发现这显然正在发生,因为我正在对单元格进行出队所以它是创建重复的引用,所以我每次都尝试创建一个新单元格,但这不起作用,因为它只会用我需要的确切数量的单元格初始化一个表格视图,但里面只有没有内容(标签或文本字段)的空白单元格.
考虑到按下按钮时我必须检索它们的值这一事实,最简单的方法是什么,这样我就可以为每个单元格保留不同的内存引用?
我已经阅读了这篇文章的建议,但仍然不知道如何创建一个单元格数组。
有什么帮助吗?
这是我的定义的代码:
NSArray *section1 = [[NSArray alloc] initWithObjects:
[NSDictionary dictionaryWithObjectsAndKeys:@"100",@"tag",@"Title",@"title",@"title",@"fieldName",nil],
[NSDictionary dictionaryWithObjectsAndKeys:@"0",@"tag",@"First Name",@"title",@"first_name",@"fieldName",nil],
[NSDictionary dictionaryWithObjectsAndKeys:@"0",@"tag",@"Last Name",@"title",@"last_name",@"fieldName",nil],
[NSDictionary dictionaryWithObjectsAndKeys:@"0",@"tag",@"Job Title",@"title",@"job_title",@"fieldName",nil],
[NSDictionary dictionaryWithObjectsAndKeys:@"0",@"tag",@"Email",@"title",@"email",@"fieldName",nil],
[NSDictionary dictionaryWithObjectsAndKeys:@"0",@"tag",@"Confirm Email",@"title",@"confirm_email",@"fieldName",nil],
[NSDictionary dictionaryWithObjectsAndKeys:@"0",@"tag",@"Password",@"title",@"password",@"fieldName",nil],
[NSDictionary dictionaryWithObjectsAndKeys:@"0",@"tag",@"Confirm Password",@"title",@"conf_password",@"fieldName",nil],
[NSDictionary dictionaryWithObjectsAndKeys:@"0",@"tag",@"Phone",@"title",@"phone",@"fieldName",nil],
nil];
....
self.formItems = [[NSArray alloc] initWithObjects:
section1,
section2,
section3,
section4,
section5,
nil];
然后我在 cellForRowAtIndexPath 上使用的代码如下:
- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath
{
static NSString *CellIdentifier = @"freeTrialFormCell";
TSIFreeTrialFormCell *cell = [tableView dequeueReusableCellWithIdentifier:CellIdentifier];
if (cell == nil) {
cell = [[TSIFreeTrialFormCell alloc] initWithStyle:UITableViewCellStyleDefault reuseIdentifier:CellIdentifier];
}
NSArray* sectionData = [self.formItems objectAtIndex:indexPath.section];
NSDictionary* myFieldInfo = [sectionData objectAtIndex:indexPath.row];
if ([[myFieldInfo objectForKey:@"fieldName"] rangeOfString:@"password"].location != NSNotFound) {
cell.textField.secureTextEntry = YES;
}
cell.fieldName = [myFieldInfo objectForKey:@"fieldName"];
cell.textField.placeholder = [myFieldInfo objectForKey:@"title"];
cell.textField.tag = [[myFieldInfo objectForKey:@"tag"] integerValue];
cell.label.text = [myFieldInfo objectForKey:@"title"];
return cell;
}