UITableViewCell中的文本向下滚动时丢失
问题描述:
我在桌面视图中添加了几个单元格,每个单元格都有一个右边的textField让用户输入文本。我发现,当我向下滚动并返回时,前几行的输入将消失。有人知道有什么问题吗?UITableViewCell中的文本向下滚动时丢失
下面是一张我的代码:
-(UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath
*)indexPath
{
//init cell
static NSString *TableIdentifier = @"MyIdentifier";
UITableViewCell *cell = (UITableViewCell *)[tableView dequeueReusableCellWithIdentifier:TableIdentifier];
if(cell == nil) {
cell = [[[UITableViewCell alloc] initWithFrame:CGRectZero
reuseIdentifier:TableIdentifier] autorelease];
}
//set cell for each row
if([indexPath row] == 0)
{
cell.textLabel.text = @"Row A";
txt_A = [self CreateTextField]; //create textField
[cell.contentView addSubview:txt_A]; //add textField to cell
}
else if([indexPath row] == 1)
{
cell.textLabel.text = @"Row B";
txt_B = [self CreateTextField];
[cell.contentView addSubview:txt_B];
}
else{...} }
答
你的意思是用户输入会消失吗?如果是这样,这可能是因为cellForRowAtIndexPath:
重复使用该单元格,并将再次执行[self CreateTextField]
。
因此,除非您在单元格消失之前存储用户输入,否则您的单元格将被重新绘制为空并重新初始化为空。
如果确实存储了用户输入,则可以使用正确的用户输入重新初始化单元。
答
我相信,当一个细胞离开屏幕(由于滚动)的iPhone立即释放它以节省内存(从而失去用户输入)。现在,当你滚动回来了,它创建了在老位置的新的UITextField一个新的细胞与
[self CreateTextField];
你必须单独存储每个文本字段的用户输入。例如,您可以成为文本字段的代理人并捕获
- (BOOL)resignFirstResponder
当用户离开文本字段焦点时将收到通知。此时,您可以假定用户已完成此特定字段并将其存储。
答
您可以使用方法来保存用户输入:
- (void)textFieldDidEndEditing:(UITextField *)textField
这种方法称为然后用户端中编辑字段。例如,将用户输入保存到数组中。
我该如何避免让用户重新创建文本字段? – 2009-09-16 10:39:10
当在文本字段中插入输入时(或单元格消失时),可以将用户输入存储在数组中,并将行号作为索引。当单元格被创建时(在你当前的代码中),你可以检查是否有一个数组条目的行号作为索引。如果存在,则使用存储的文本初始化文本字段,如果没有初始化空字段。 – Jake 2009-09-16 11:32:08
感谢MiRAGe ...这帮了很多! – iwasrobbed 2010-05-08 22:09:53