Iphone UITableView don';t重复使用细胞,好的情况下这样做?

Iphone UITableView don';t重复使用细胞,好的情况下这样做?,iphone,uitableview,iso,Iphone,Uitableview,Iso,我在UITableView中有5个单元格。每个都有一个UITextField作为子视图,用户将在其中输入数据。如果我使用单元格重用,如果单元格被滚动到视图之外,文本字段将被清除。我不想处理这件事。有没有办法不重用单元格,这样我就不会有这个问题,如果有,怎么做 这是个坏主意吗 您可以为每个单元格指定一个唯一的ReuseIdentifier,可以在名称后面附加indexPath.row。如果您只有5个单元格,这可能没问题,但您正在失去UITableView的主要优点之一。在这种情况下,您可能希望改用

我在UITableView中有5个单元格。每个都有一个UITextField作为子视图,用户将在其中输入数据。如果我使用单元格重用,如果单元格被滚动到视图之外,文本字段将被清除。我不想处理这件事。有没有办法不重用单元格,这样我就不会有这个问题,如果有,怎么做


这是个坏主意吗

您可以为每个单元格指定一个唯一的ReuseIdentifier,可以在名称后面附加indexPath.row。如果您只有5个单元格,这可能没问题,但您正在失去
UITableView
的主要优点之一。在这种情况下,您可能希望改用
UIScrollView

我的一个应用程序中有相同的功能,我使用下面的代码来实现这一点,我从未遇到过这种问题

首先,您需要将所有textField值临时存储在数组中。这样做数组

arrTemp=[[NSMutableArray alloc]initWithObjects:[NSString stringWithFormat:@""],
         [NSString stringWithFormat:@""],
         [NSString stringWithFormat:@""],
         [NSString stringWithFormat:@""],
         [NSString stringWithFormat:@""],
         [NSString stringWithFormat:@""],
         [NSString stringWithFormat:@""],
         [NSString stringWithFormat:@""],
         [NSString stringWithFormat:@""],nil];
然后给出所有textField标记=indexPath.row

之后,您需要在以下两种方法中替换textField值

-(BOOL)textFieldShouldReturn:(UITextField *)textField{
   [arrTemp replaceObjectAtIndex:textField.tag withObject:textField.text];
}

-(void)textFieldDidEndEditing:(UITextField *)textField{
[arrTemp replaceObjectAtIndex:textField.tag withObject:textField.text];
}
最后,您需要在cellForRowAtIndexPath数据源方法中设置该值。因此,每当用户滚动tableview时,它都会从临时数组中设置上一个值。像这样

cell.txtEntry.text = [arrTemp objectAtIndex:indexPath.row];

可能我忘了粘贴一些代码。因此,如果您有任何问题,请告诉我。

我想说5个textview是一个完美的例子,它不需要排队和取消单元格排队,只需在view中创建所有单元格,然后加载、存储在数组中并按要求返回。

如果您打开,您将看到Apple如何使用xib文件加载UITableViewCells

在IngreditDetailViewController文件中:

@property (nonatomic, assign) IBOutlet EditingTableViewCell *editingTableViewCell;
// ...
[[NSBundle mainBundle] loadNibNamed:@"EditingTableViewCell" owner:self options:nil];
// this will cause the IBOutlet to be connected, and you can now use self.editingTableViewCell
虽然看起来他们在重用单元格,但您可以使用相同的方法将5个单元格加载到5个单独的IBoutlet中,然后在CellForRowatineXpath中,您只需返回这5个单元格,而不需要调用dequeue方法


注意:您可能需要将单元格存储为
strong
属性(而不是
assign
ing)。

您选择是否重用不会阻止iOS从表中删除单元格并可能释放它们。也许iOS不会删除一个单元格,只要它有/是第一响应者(例如,在编辑文本字段时),这是一个好消息。所以,我真的需要将我的用户输入存储到一个数组或其他东西中,这样当单元格重新滚动时,我可以将其放回文本字段中……这样肯定会更安全。您可以通过保留自己的CellView(例如在阵列中)来避免卸载。