如何刷新iOS 5中的可重用单元?

时间:2011-11-29 19:56:13

标签: iphone uitableview ios5

我正在故事板中使用标识符“TextCell”构建自定义单元格。它是一个平面单元,但是通过代码,我将每个单元格添加一个文本字段,因为我可以有一个“n”个单元格,因此用户可以在每个单元格中插入文本。我的问题是,我创建的文本域似乎在一个又一个地重复创建自己。我可以这样说,因为我有一个占位符文本,它会变得更暗更暗。

我也在使用ARC。请您提供给我的任何见解可以帮助我很多。

我附加了函数的代码,我将文本字段添加到单元格中:

UITableViewCell * cell = [tableView dequeueReusableCellWithIdentifier:@"TextCell"];


//create text field inside cell and init it with the default settings
UITextField * textHolder = [[UITextField alloc] initWithFrame:CGRectMake(18, 10, 300, 44)];
[textHolder setPlaceholder:[cellsText objectAtIndex:indexPath.row]];
//[textHolder setValue:[UIColor blackColor] forKeyPath:@"_placeholderLabel.textColor"];
[textHolder setFont:[UIFont fontWithName:@"HelveticaNeue-Regular" size:16]];
[textHolder setTextColor:[UIColor blackColor]];
[textHolder setTextAlignment:UITextAlignmentLeft];
textHolder.tag = FIELD_PREFIX + indexPath.row;
[textHolder setDelegate:self];

[[NSBundle mainBundle] loadNibNamed:@"accessoryView" owner:self options:nil];
[textHolder setInputAccessoryView:accessoryView];
[cell addSubview:textHolder];    

//set keyboard to type passwords    
[textHolder setSecureTextEntry:YES];    

2 个答案:

答案 0 :(得分:3)

每次重复使用单元格时,都会将另一个UITextField添加到预先存在的文本字段集中。您有两种选择:

1)将文本字段放在故事板中的custon表视图单元格中,而不是手动创建。通过使用UITableViewCell的自定义子类,您还可以将自己的文本字段分配给自定义子类中的属性。这有额外的好处,你可以添加一堆其他东西到单元格。然后,您可以访问该属性,而不是创建新的文本字段。

2)在创建新文本字段之前删除“旧”文本字段。您可能必须搜索所有子视图以查找UITextField的实例才能实现此目的,因为您已经将标记值用于其他内容。

第一个绝对是更清洁的版本。

答案 1 :(得分:1)

您不应该将文本字段添加到视图中,您应该将它们添加到内容视图中:

[cell.contentView addSubview:textHolder];

希望它有所帮助。