iOS滚动表查看可重用的单元格重新加载

时间:2016-01-19 09:16:27

标签: ios objective-c uitableview

我在iOS中使用tableviews。滚动时重新加载可重用单元格。

因此,当更新单元格内的示例 - textfields时,一旦滚动就会消失。我通过使用保存所有单元格中的所有文本的Array来解决它,但我想知道是否有更好的方法来解决这个问题。

感谢。

6 个答案:

答案 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进行任何更改,都要更新数组。

  1. 使用此数组填充tableView。

答案 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;
    }