我在tableview中添加了几个单元格,每个单元格右侧都有一个textField,用户可以输入文本。我发现当我向下滚动并返回时,前几行的输入将消失。有人知道这是什么问题吗?
以下是我的代码:
-(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{...} }
答案 0 :(得分:3)
你的意思是用户输入会消失吗?如果是这样,这可能是因为cellForRowAtIndexPath:
重用了单元格并将再次执行[self CreateTextField]
。
因此,除非您在单元格消失之前存储用户输入,否则您的单元格将被重绘为空并重新初始化为空。
如果您确实存储了用户输入,则可以使用正确的用户输入重新初始化单元格。
答案 1 :(得分:1)
我相信当一个单元格离开屏幕时(由于滚动),iPhone立即释放它以节省内存(从而失去用户输入)。现在,当您向上滚动时,它将创建一个新单元格,其中包含旧位置的新UITextField
[self CreateTextField];
您必须分别存储每个文本字段的用户输入。例如,您可以成为文本字段的委托并捕获
- (BOOL)resignFirstResponder
在用户离开文本字段焦点时收到通知。此时,您可以假设用户已完成此特定字段并存储它。
答案 2 :(得分:1)
您可以使用方法保存用户输入:
- (void)textFieldDidEndEditing:(UITextField *)textField
此方法调用然后用户端编辑该字段。例如,将用户输入保存到数组中。