我在UITableView中有5个单元格。每个都有一个UITextField作为子视图,用户将在其中输入数据。如果我使用单元格重用,如果单元格滚出视图,文本字段将被清除。我不想要处理这件事。有没有办法不重复使用单元格,以便我没有这个问题,如果有,怎么办?
这是个坏主意吗?
答案 0 :(得分:4)
我的一个应用程序中有相同的功能,我使用下面的代码来实现这一点,我从来没有遇到过这种问题。
首先,您需要将所有textField值临时存储在Array中。像这样制作数组。
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];
我可能忘记了一些要粘贴的代码。所以,如果您有任何问题,请告诉我。
答案 1 :(得分:2)
您可以为每个单元格指定一个唯一的ReuseIdentifier,方法是将indexPath.row附加到名称中。如果你只有5个单元格,这可能会没问题,但是你失去了UITableView
的一个主要好处。在这种情况下,您可能希望改为使用UIScrollView
。
答案 2 :(得分:0)
我想说5个textview是一个完美的例子,可以不对队列进行排队和排队,只需在视图中创建它们就可以加载,存储在数组中并按要求返回。
答案 3 :(得分:0)
如果您打开Apple's Recipes sample application,您将看到Apple如何使用xib文件加载UITableViewCells。
在IngredientDetailViewController文件中:
@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中,然后在cellForRowAtIndexPath中,只返回那些5而不是调用dequeue方法。
注意:您可能需要将单元格存储为strong
属性(而不是assign
属性。