使自定义动态单元格不能在UITableView中重用

时间:2013-09-06 08:03:09

标签: ios objective-c uitableview

我正在使用名为UITableViewCell的自定义MessageCell子类。

我像这样初始化单元格:

- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath {


    MessageCell *cell = [tableView dequeueReusableCellWithIdentifier:@"messageCell"];

    // more code

   return cell;

}

在每个自定义单元格中,我都有一个用于标记此单元格的复选框。当一个单元被标记时,它被添加到一个数组中,反之亦然。

虽然这在数据方面起作用,但UI并没有像现在这样反映它。发生的事情是,除了标记的细胞外,还标记了其他细胞。

我认为这种行为源于单元格的可重用性,即当我将单元格标记为已选中时,它具有一个公共指针,指向此屏幕位置中的所有未来单元格。

出于这个原因,我想使用“正常”不可重复使用的细胞。

所以我试过了:

  MessageCell *cell = [[MessageCell alloc] init];

OR:

  MessageCell *cell = [[MessageCell alloc] initWithStyle:UITableViewCellStyleDefault reuseIdentifier:nil];

但是他们都导致显示空单元格。

1 个答案:

答案 0 :(得分:1)

您仍然希望重复使用单元格!只需检查您的数据并将复选框设置为在cellForRowAtIndexPath中选中或取消选中:

MessageCell *cell = [tableView dequeueReusableCellWithIdentifier: @"messageCell"];

if (condition cell should be checked) //set the cells checkbox to checked
else //set the cells checkbox to unchecked

或者某种方法。

PS重新阅读你的问题: 你真的需要引用阵列中的单元格吗?例如,如果你需要创建一个单元格,那么你不能存储indexPath并使用cellForRowAtIndexPath:吗?