Ios UItableViewCell具有多个标签的自定义ContentView,需要保留选择

Ios UItableViewCell具有多个标签的自定义ContentView,需要保留选择,ios,uitableview,state-management,multipleselection,Ios,Uitableview,State Management,Multipleselection,我有一个UITableView,每个单元格中有多个UILabels,就像网格视图一样。我添加了一个UIgestureRecognitor,对每个标签执行一些操作(例如更改其背景)。一切正常 但问题是,每当我向上或向下滚动时,在单元格中选择的标签都会失去其选择状态。当我搜索时,一些人建议我使用不同的单元格ID创建单元格,或者改用UIScrollView,但与在UITableViewCell的contentView中添加多个标签相比,这两种方法将使用更多的内存 滚动时,如何在每个单元格中保留UILa

我有一个
UITableView
,每个单元格中有多个
UILabel
s,就像网格视图一样。我添加了一个
UIgestureRecognitor
,对每个标签执行一些操作(例如更改其背景)。一切正常

但问题是,每当我向上或向下滚动时,在单元格中选择的标签都会失去其选择状态。当我搜索时,一些人建议我使用不同的单元格ID创建单元格,或者改用
UIScrollView
,但与在
UITableViewCell
contentView
中添加多个标签相比,这两种方法将使用更多的内存


滚动时,如何在每个单元格中保留
UILabel
s的选择状态?

我想到的第一件事是创建一个存储标签状态的nsmutablearray,然后在
cellForIndexPath:
中使用此数组来设置标签的背景。这应该是可行的,但可能有一个更好的解决方案,感觉不太像黑客。

因为选择状态对于准确绘制每个单元格是必需的,所以您应该将每个标签状态的属性添加到单元格的支持模型对象中。然后在
tableView:cellforrowatinexpath:
中,可以从模型对象确定每个标签的正确选择状态:

- (void)tableView:(UITableView*) cellForRowAtIndexPath:(NSIndexedPath*)path {
    CustomCell *cell; // trimmed for brevity
    CellModelObject *modelObject; // this would be pulled from an array, dictionary, or some other collection

    cell.firstLabel.selected = modelObject.isFirstLabelSelected;
    cell.secondLabel.selected = modelObject.isSecondLabelSelected;
    // etc.

    return cell;
}
随着表格的滚动和单元格的重复使用,其状态将在
cellforrowatinexpath
中设置,而不管单元格之前显示了什么