我在iOS中使用tableviews
。滚动时重新加载可重用单元格。
因此,当更新单元格内的示例 - textfields
时,一旦滚动就会消失。我通过使用保存所有单元格中的所有文本的Array
来解决它,但我想知道是否有更好的方法来解决这个问题。
感谢。
答案 0 :(得分:1)
使用String数组,您必须在tableview中存储所有文本字段的数据。
使用UITableView
的委托方法可以更有效地实施。
-(void)tableView:(UITableView *)tableView didEndDisplayingCell:(UITableViewCell *)cell forRowAtIndexPath:(NSIndexPath *)indexPath {
MyCell * mc = (MyCell *) cell;
names[indexPath.row] = mc.myTf.text;
}
- (void)tableView:(UITableView *)tableView willDisplayCell:(UITableViewCell *)cell forRowAtIndexPath:(NSIndexPath *)indexPath {
MyCell * mc = (MyCell *) cell;
mc.myTf.text = names[indexPath.row];
}
此处,MyCell是具有UITextField
的自定义单元格。 name []是在类范围内声明的NSString
数组,如NSString * names[20]
。
答案 1 :(得分:0)
用于内存管理(释放内存)tableview删除未在当前屏幕中显示的单元格内存,它只将那些单元格保留在当前显示在屏幕上的内存中,因此您必须将该文本与tableview分开存储。
答案 2 :(得分:0)
您所描述的是表格视图如何工作! tableView是一个显示,而不是一个商店,可重用的单元格只是当前显示的那些
使用数组(或集合)来保存数据并使用tableView显示它是正确的
答案 3 :(得分:0)
你的问题可能是因为多线程。如果您正在从GCD操作或任何NSOperation(不同的线程)重新加载数据,那么您必须使用以下代码来获取主线程的句柄
dispatch_sync(dispatch_get_main_queue(), ^{
//perform the reload activity
});
答案 4 :(得分:0)
是的,你做对了,因为你需要保存你的数据需要重复使用单元格 -
1。有一个数组来保存你的数据。
2。
,无论何时对textField进行任何更改,都要更新数组。答案 5 :(得分:0)
您需要将cellIdentifier定义为唯一。然后使用唯一标识符创建每个单元格。
- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath
{
NSString *CellIdentifier = [NSString stringWithFormat:@"Cell%dR%d",indexPath.section,indexPath.row];
UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:CellIdentifier];
if(cell == nil)
{
cell = [[UITableViewCell alloc] initWithStyle:UITableViewCellStyleValue1 reuseIdentifier:CellIdentifier];
//your logic here
}
return cell;
}